png写入pic空间后,pic为什么自动适应png图片的大小
Local $iLength = BinaryLen($bDate)Local $hData = _MemGlobalAlloc($iLength, $GMEM_MOVEABLE) ;内存对象
Local $pData = _MemGlobalLock($hData) ;返回内存块的第一字节指针
Local $tData = DllStructCreate('byte[' & $iLength & ']', $pData)
DllStructSetData($tData, 1, $bDate)
_MemGlobalUnlock($hData)
Local $pStream = _WinAPI_CreateStreamOnHGlobal($hData) ;----------------------------------创建一个流对象
_GDIPlus_Startup()
Local $hImage = _GDIPlus_BitmapCreateFromStream($pStream) ;一个新位图对象的句柄
Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) ;返回值,位图对象句柄
Lo
_WinAPI_ReleaseStream($pStream)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
Local $idPic = GUICtrlCreatePic('', $iLeft, $iTop, $iWidth, $iHeight, -1, $GUI_WS_EX_PARENTDRAG)
Local $hPic = GUICtrlGetHandle($idPic)
_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
Local $hObj = _SendMessage($hPic, $STM_GETIMAGE) 本帖最后由 水木子 于 2016-9-17 21:36 编辑
这是API的效果,和我的一毛一样,根本不懂大神们如何做到的
431852 发表于 2016-9-17 20:24 http://www.autoitx.com/images/common/back.gif
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <WindowsConstants.au3>
Global $iGuiWidth = 600, $iGuiHeight = 450
Global $iImageWidth = $iGuiWidth - 20, $iImageHeight = $iGuiHeight - 20
OnAutoItExitRegister('_Exit')
_GDIPlus_Startup() ;初始化 GDI+
$hBMP = _ScreenCapture_Capture('', 0, 0, $iGuiWidth, $iGuiHeight)
$hBitmap1 = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
$hGui1 = GUICreate('', $iGuiWidth, $iGuiHeight)
$Pic1 = GUICtrlCreatePic('', 10, 10, $iImageWidth, $iImageHeight)
$hPic1 = GUICtrlGetHandle($Pic1)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hPic1)
$hGraphics = _GDIPlus_BitmapCreateFromGraphics($iImageWidth, $iImageHeight, $hGraphic)
$hGfxCtxt = _GDIPlus_ImageGetGraphicsContext($hGraphics)
_GDIPlus_GraphicsDrawImageRectRect($hGfxCtxt, $hBitmap1, 0, 0, $iImageWidth, $iImageHeight, 0, 0, $iImageWidth, $iImageHeight)
$hBitmap2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hGraphics)
_SetBitmap($hPic1, $hBitmap2)
_GDIPlus_BitmapDispose($hBitmap1)
_GDIPlus_BitmapDispose($hGraphics)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hGfxCtxt)
GUISetState()
Do
Until GUIGetMsg() = -3
Func _SetBitmap($hWnd, $hBitmap)
$hObj = _SendMessage($hWnd, 0x0172, 0, $hBitmap) ;$STM_SETIMAGE = 0x0172
_WinAPI_DeleteObject($hObj)
Local $hObj = _SendMessage($hWnd, 0x0173) ;$STM_GETIMAGE = 0x0173
If $hObj <> $hBitmap Then
_WinAPI_DeleteObject($hBitmap)
EndIf
EndFunc ;==>_SetBitmap
Func _Exit();清理 GDI+ 资源
_GDIPlus_Shutdown()
GUIDelete($hGui1)
Exit
EndFunc ;==>_Exit 我所有的金币都交出来了,只求大神帮忙,
我想用克隆对象的方法,但是不识别,我疯了,没办法了,不是我不认真,是测试了好多天了,要屎了
{:face (394):}
不会的帮忙顶一下,顶一下又不会怀孕,为什么不顶呢 要屎啦,要屎啦,要屎啦,要屎啦,要屎啦 本帖最后由 水木子 于 2016-9-17 14:54 编辑
你这个方法不对,我觉得应该用 _GDIPlus_GraphicsDrawImageRectRect 这个函数。 回复 4# 水木子
用过啦,超版,这个方法绘制的图片是绘制于窗体之上,移出屏幕就会消失,根不符合软件界面的要求啊 要屎啦,要屎啦,要屎啦,要屎啦,要屎啦 回复 4# 水木子
_WinAPI_StretchBlt应该用这个函数,但是不知道怎么插入,超版知道么,api只有一段还和系统不兼容 回复水木子
用过啦,超版,这个方法绘制的图片是绘制于窗体之上,移出屏幕就会消失,根不符合软 ...
431852 发表于 2016-9-17 17:56 http://www.autoitx.com/images/common/back.gif
是吗?我怎么觉得挺好用呢! 这个界面是我用PNG模拟的,也没你说的问题啊!
回复 9# 水木子
大神,你的png画到窗口上的,还是控件上的,要是画到窗口能不能给我看看源码,我是真没办法啊。控件的话,我真不明白,这个函数不就是画在窗口上的么
这是API的效果,和我的一毛一样,根本不懂大神们如何做到的{:face (319):} 回复水木子
大神,你的png画到窗口上的,还是控件上的,要是画到窗口能不能给我看看源码,我是真没办 ...
431852 发表于 2016-9-17 20:21 http://www.autoitx.com/images/common/back.gif
窗口上也行,控件上也可以,这是自己决定的好吗 回复 9# 水木子
水神,我也想要这个!
页:
[1]
2