431852 发表于 2016-9-17 12:40:27

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 12:40:28

本帖最后由 水木子 于 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

431852 发表于 2016-9-17 12:43:01

我所有的金币都交出来了,只求大神帮忙,
我想用克隆对象的方法,但是不识别,我疯了,没办法了,不是我不认真,是测试了好多天了,要屎了
{:face (394):}
不会的帮忙顶一下,顶一下又不会怀孕,为什么不顶呢

431852 发表于 2016-9-17 12:46:47

要屎啦,要屎啦,要屎啦,要屎啦,要屎啦

水木子 发表于 2016-9-17 14:51:04

本帖最后由 水木子 于 2016-9-17 14:54 编辑

你这个方法不对,我觉得应该用 _GDIPlus_GraphicsDrawImageRectRect 这个函数。

431852 发表于 2016-9-17 17:56:56

回复 4# 水木子


    用过啦,超版,这个方法绘制的图片是绘制于窗体之上,移出屏幕就会消失,根不符合软件界面的要求啊

431852 发表于 2016-9-17 18:09:58

要屎啦,要屎啦,要屎啦,要屎啦,要屎啦

431852 发表于 2016-9-17 19:29:53

回复 4# 水木子


    _WinAPI_StretchBlt应该用这个函数,但是不知道怎么插入,超版知道么,api只有一段还和系统不兼容

水木子 发表于 2016-9-17 19:36:40

回复水木子


    用过啦,超版,这个方法绘制的图片是绘制于窗体之上,移出屏幕就会消失,根不符合软 ...
431852 发表于 2016-9-17 17:56 http://www.autoitx.com/images/common/back.gif

是吗?我怎么觉得挺好用呢!

水木子 发表于 2016-9-17 19:49:52

这个界面是我用PNG模拟的,也没你说的问题啊!

431852 发表于 2016-9-17 20:21:09

回复 9# 水木子

大神,你的png画到窗口上的,还是控件上的,要是画到窗口能不能给我看看源码,我是真没办法啊。控件的话,我真不明白,这个函数不就是画在窗口上的么

431852 发表于 2016-9-17 20:24:36


这是API的效果,和我的一毛一样,根本不懂大神们如何做到的{:face (319):}

431852 发表于 2016-9-17 20:24:58

水木子 发表于 2016-9-17 21:28:21

回复水木子

大神,你的png画到窗口上的,还是控件上的,要是画到窗口能不能给我看看源码,我是真没办 ...
431852 发表于 2016-9-17 20:21 http://www.autoitx.com/images/common/back.gif

窗口上也行,控件上也可以,这是自己决定的好吗

heroxianf 发表于 2016-9-17 21:29:07

回复 9# 水木子


    水神,我也想要这个!
页: [1] 2
查看完整版本: png写入pic空间后,pic为什么自动适应png图片的大小