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

[网络通信] png写入pic空间后,pic为什么自动适应png图片的大小

  [复制链接]
发表于 2016-9-17 12:40:27 | 显示全部楼层 |阅读模式
悬赏6金钱已解决
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)

最佳答案

查看完整内容

[au3]#include #include #include 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 = GUICtr ...
发表于 2016-9-17 12:40:28 | 显示全部楼层
本帖最后由 水木子 于 2016-9-17 21:36 编辑
这是API的效果,和我的一毛一样,根本不懂大神们如何做到的
431852 发表于 2016-9-17 20:24



#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
 楼主| 发表于 2016-9-17 12:43:01 | 显示全部楼层
我所有的金币都交出来了,只求大神帮忙,
我想用克隆对象的方法,但是不识别,我疯了,没办法了,不是我不认真,是测试了好多天了,要屎了

不会的帮忙顶一下,顶一下又不会怀孕,为什么不顶呢
 楼主| 发表于 2016-9-17 12:46:47 | 显示全部楼层
要屎啦,要屎啦,要屎啦,要屎啦,要屎啦
发表于 2016-9-17 14:51:04 | 显示全部楼层
本帖最后由 水木子 于 2016-9-17 14:54 编辑

你这个方法不对,我觉得应该用 _GDIPlus_GraphicsDrawImageRectRect 这个函数。
 楼主| 发表于 2016-9-17 17:56:56 | 显示全部楼层
回复 4# 水木子


    用过啦,超版,这个方法绘制的图片是绘制于窗体之上,移出屏幕就会消失,根不符合软件界面的要求啊
 楼主| 发表于 2016-9-17 18:09:58 | 显示全部楼层
要屎啦,要屎啦,要屎啦,要屎啦,要屎啦
 楼主| 发表于 2016-9-17 19:29:53 | 显示全部楼层
回复 4# 水木子


    _WinAPI_StretchBlt应该用这个函数,但是不知道怎么插入,超版知道么,api只有一段还和系统不兼容
发表于 2016-9-17 19:36:40 | 显示全部楼层
回复  水木子


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


是吗?我怎么觉得挺好用呢!
发表于 2016-9-17 19:49:52 | 显示全部楼层
这个界面是我用PNG模拟的,也没你说的问题啊!

本帖子中包含更多资源

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

×
 楼主| 发表于 2016-9-17 20:21:09 | 显示全部楼层
回复 9# 水木子

大神,你的png画到窗口上的,还是控件上的,要是画到窗口能不能给我看看源码,我是真没办法啊。控件的话,我真不明白,这个函数不就是画在窗口上的么
 楼主| 发表于 2016-9-17 20:24:36 | 显示全部楼层

这是API的效果,和我的一毛一样,根本不懂大神们如何做到的
 楼主| 发表于 2016-9-17 20:24:58 | 显示全部楼层

本帖子中包含更多资源

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

×
发表于 2016-9-17 21:28:21 | 显示全部楼层
回复  水木子

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


窗口上也行,控件上也可以,这是自己决定的好吗
发表于 2016-9-17 21:29:07 | 显示全部楼层
回复 9# 水木子


    水神,我也想要这个!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 04:52 , Processed in 0.104994 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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