找回密码
 加入
搜索
查看: 8074|回复: 16

[GUI管理] 如何读取BMP图片中某个位图的资源(已解决)

 火.. [复制链接]
发表于 2012-2-3 20:50:28 | 显示全部楼层 |阅读模式
本帖最后由 nmgwddj 于 2012-2-5 22:34 编辑

附件中的几个BMP图片是特制的,某无盘软件的控制台图片资源。

我只是想通过代码的方式获取这些图片资源里面的位图资源来做按钮,看如下截图


上图是鼠标悬停状态,可以在附件中的bmp图片中看到每个按钮的 静止-鼠标悬停-按下的状态。但是几种状态都是只储存在一个BMP图片中的。所以想请教以下如何在代码中实现应用到按钮上。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-2-3 21:22:00 | 显示全部楼层
这个我也想学,帮顶!
发表于 2012-2-3 21:51:25 | 显示全部楼层
位图内部有资源索引号
 楼主| 发表于 2012-2-3 22:07:45 | 显示全部楼层
回复 3# netegg


    是否可以利用_GUICtrlButton_SetImage来设置按钮图片,我试了一试,是显示整个图片,并不是按我设置的索引来显示的。
发表于 2012-2-3 23:17:12 | 显示全部楼层
用按钮控件或图片控件都可以,不过前提可能都需要按坐标读取位图的各个区域。
或者,先分割图片为4个独立的bmp文件,那样相对简单点,也便于修改。
 楼主| 发表于 2012-2-3 23:24:31 | 显示全部楼层
回复 5# afan


    我在用按钮做,只不过多了个边

刚才想了想,应该是一个图片控件,图片显示按整个图片的坐标来显示

剩下的就是监控鼠标的悬停和按下事件了。

先把大致界面做出来,这个等把其他功能搞定再说。
发表于 2012-2-3 23:45:34 | 显示全部楼层
拆位图还真没什么印象了,好像有个api可以弄
发表于 2012-2-4 12:13:34 | 显示全部楼层
发表于 2012-2-4 23:17:08 | 显示全部楼层
切割图片后再分开研究?
 楼主| 发表于 2012-2-5 17:19:21 | 显示全部楼层
回复 5# afan


    用第二种方式已经可以实现,第一种不知道A版可有高见。虚心学习。
发表于 2012-2-5 17:30:50 | 显示全部楼层
回复 10# nmgwddj


    高见可没有,可以参考 http://www.autoitx.com/forum.php ... amp;fromuid=7644923
 楼主| 发表于 2012-2-5 18:45:42 | 显示全部楼层
本帖最后由 nmgwddj 于 2012-2-5 18:48 编辑

回复 11# afan


    非常感谢,分割图片某个位置可以实现,不知道在不另存为Bmp文件的情况下如何直接在代码中调用图片资源从而显示在窗口上。
发表于 2012-2-5 18:52:09 | 显示全部楼层
注释掉 _GDIPlus_ImageDispose($hImage1)
返回 $hImage1 可直接使用。
 楼主| 发表于 2012-2-5 19:07:01 | 显示全部楼层
本帖最后由 nmgwddj 于 2012-2-5 19:09 编辑

回复 13# afan


    貌似不可行,莫非是我哪里理解错误了!
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#region ### START Koda GUI section ### Form=
$sInPic = 'AddMore.bmp'

$Image = _ImageRectToFile($sInPic, 339, 0, 113, 50)
;ShellExecute($sOutPic)
$Form1 = GUICreate("Form1", 623, 448, 229, 170)
$Pic1 = GUICtrlCreatePic($Image, 120, 72, 204, 84)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

Func _ImageRectToFile($sInPic, $iSrcX, $iSrcY, $iSrcW, $iSrcH, $iDstX = 0, $iDstY = 0, $iDstW = $iSrcW, $iDstH = $iSrcH)
        _GDIPlus_Startup()
        $hImage = _GDIPlus_ImageLoadFromFile($sInPic)
        $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
        $hImage1 = _GDIPlus_BitmapCreateFromGraphics($iDstW, $iDstH, $hGraphics)
        $hGraphics1 = _GDIPlus_ImageGetGraphicsContext($hImage1)
        _GDIPlus_GraphicsDrawImageRectRect($hGraphics1, $hImage, $iSrcX, $iSrcY, $iSrcW, $iSrcH, $iDstX, $iDstY, $iDstW, $iDstH)
        ;_GDIPlus_ImageSaveToFile($hImage1, $sOutPic)
        _GDIPlus_GraphicsDispose($hGraphics)
        _GDIPlus_GraphicsDispose($hGraphics1)
        _GDIPlus_ImageDispose($hImage)
        ;_GDIPlus_ImageDispose($hImage1)
        _GDIPlus_Shutdown()
        Return $hImage1
EndFunc   ;==>_ImageRectToFile
图片资源

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-2-5 19:34:45 | 显示全部楼层
不明白,围观。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-3 00:24 , Processed in 0.086598 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表