RagsRevenge Posted December 21, 2010 Posted December 21, 2010 (edited) I'm trying to tidy up the installation of 1 of my scripts. 1 of the things I'd like to do is load the required BMPs from memory, as opposed to from file. I have the following code, but I don't know what I need to do with the bitmap stream to enable me to use it on a button. My experiments allow me to draw the BMP to the GUI, but not as a button image. Thanks for any help. D expandcollapse popup#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GDIplus.au3> #include <Memory.au3> #include <ButtonConstants.au3> _GDIPlus_Startup() Global $bitmap_from_file ;Local $image = $bitmap_from_file = Load_BMP_From_Mem(imButExp()) ;$saveFile = _GDIPlus_ImageSaveToFile ($bitmap_from_file, "c:\temp\Travel1DC.bmp") #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 267, 250, 193, 125) GUICtrlCreateButton("", 10, 15, 44, 44, $BS_BITMAP ) GUICtrlSetImage(-1, $bitmap_from_file) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### #cs Experimentation Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1) Local $bg_w = 10, $bg_h = 60 Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(100, 100, $hGraphic) Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsClear($hContext) _GDIPlus_GraphicsDrawImageRect($hContext, $hImage, 0, 0, 100, 100) _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 97, 30, 100, 100) local $hGUI = WinGetHandle("Form1") _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW) _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0) _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE) #ce While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ;$saveFile = _GDIPlus_ImageSaveToFile ($bitmap_from_file, "c:\temp\Travel1DC.bmp") ;works!!! _GDIPlus_Shutdown() Func Load_BMP_From_Mem($pic) ;coded by UEZ. Thanks to ProgAndy for mem allocation lines Local $memBitmap, $len, $tMem, $hImage, $hData, $pData, $hStream, $hBitmapFromStream $memBitmap = Binary($pic) ;load image saved in variable (memory) and convert it to binary $len = BinaryLen($memBitmap) ;get length of image $hData = _MemGlobalAlloc($len, 0x0002) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) $pData = _MemGlobalLock($hData) ;translate the handle into a pointer $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE $hStream = _WinAPI_CreateStreamOnHGlobal($pData) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents $hBitmapFromStream = _GDIPlus_BitmapCreateFromStream($hStream) ;Creates a Bitmap object based on an IStream COM interface $tMem = "" Return $hBitmapFromStream EndFunc Func _WinAPI_CreateStreamOnHGlobal($hGlobal = 0, $fDeleteOnRelease = True) Local $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "hwnd", $hGlobal, "int", $fDeleteOnRelease, "ptr*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[3] EndFunc ;==>_WinAPI_CreateStreamOnHGlobal Func _GDIPlus_BitmapCreateFromStream($pStream) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_BitmapCreateFromStream Func imButExp() Local $text = '' $text &= '0x424DF406000000000000360400002800000019000000190000000100080000000000BE020000120B0000120B000000000000000000000000000001010100020202000303030004040400' $text &= '05050500060606000707070008080800090909000A0A0A000B0B0B000C0C0C000D0D0D000E0E0E000F0F0F0010101000111111001212120013131300141414001515150016161600171717' $text &= '0018181800191919001A1A1A001B1B1B001C1C1C001D1D1D001E1E1E001F1F1F00202020002121210022222200232323002424240025252500262626002727270028282800292929002A2A' $text &= '2A002B2B2B002C2C2C002D2D2D002E2E2E002F2F2F00303030003131310032323200333333003434340035353500363636003737370038383800393939003A3A3A003B3B3B003C3C3C003D' $text &= '3D3D003E3E3E003F3F3F00404040004141410042424200434343004444440045454500464646004747470048484800494949004A4A4A004B4B4B004C4C4C004D4D4D004E4E4E004F4F4F00' $text &= '505050005151510052525200535353005454540055555500565656005757570058585800595959005A5A5A005B5B5B005C5C5C005D5D5D005E5E5E005F5F5F006060600061616100626262' $text &= '00636363006464640065656500666666006767670068686800696969006A6A6A006B6B6B006C6C6C006D6D6D006E6E6E006F6F6F0070707000717171007272720073737300747474007575' $text &= '7500767676007777770078787800797979007A7A7A007B7B7B007C7C7C007D7D7D007E7E7E007F7F7F00808080008181810082828200838383008484840085858500868686008787870088' $text &= '888800898989008A8A8A008B8B8B008C8C8C008D8D8D008E8E8E008F8F8F00909090009191910092929200939393009494940095959500969696009797970098989800999999009A9A9A00' $text &= '9B9B9B009C9C9C009D9D9D009E9E9E009F9F9F00A0A0A000A1A1A100A2A2A200A3A3A300A4A4A400A5A5A500A6A6A600A7A7A700A8A8A800A9A9A900AAAAAA00ABABAB00ACACAC00ADADAD' $text &= '00AEAEAE00AFAFAF00B0B0B000B1B1B100B2B2B200B3B3B300B4B4B400B5B5B500B6B6B600B7B7B700B8B8B800B9B9B900BABABA00BBBBBB00BCBCBC00BDBDBD00BEBEBE00BFBFBF00C0C0' $text &= 'C000C1C1C100C2C2C200C3C3C300C4C4C400C5C5C500C6C6C600C7C7C700C8C8C800C9C9C900CACACA00CBCBCB00CCCCCC00CDCDCD00CECECE00CFCFCF00D0D0D000D1D1D100D2D2D200D3' $text &= 'D3D300D4D4D400D5D5D500D6D6D600D7D7D700D8D8D800D9D9D900DADADA00DBDBDB00DCDCDC00DDDDDD00DEDEDE00DFDFDF00E0E0E000E1E1E100E2E2E200E3E3E300E4E4E400E5E5E500' $text &= 'E6E6E600E7E7E700E8E8E800E9E9E900EAEAEA00EBEBEB00ECECEC00EDEDED00EEEEEE00EFEFEF00F0F0F000F1F1F100F2F2F200F3F3F300F4F4F400F5F5F500F6F6F600F7F7F700F8F8F8' $text &= '00F9F9F900FAFAFA00FBFBFB00FCFCFC00FDFDFD00FEFEFE00FFFFFF00E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4' $text &= 'E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4EAE4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4C9B7B0B3A79AA2AFB2B4C1E4E4E4E4E4E4E4000000E4E4E4E4E4F0C9967E' $text &= '767B8187847E7C7B8BC3E4E4E4E4E4E4000000E4E4E4E4F5B08B8986888C90928F8B8B898987ACE4E4E4E4E4000000E4E4E4EDCA8C77898F94989A9B9A9898938C7889C4E4E4E4E4000000' $text &= 'E4E4E4CC998A8993979B9FA2A3A4A3A19C968F8C8CC1E4E4E4000000E4E4E4B9808990969DA3A7ABACADABA8A59F988C7CB6E4E4E4000000E4E4E4B2798C969BA4ACB1B6B7B8B6B4B0ABA1' $text &= '927FB4E4E4E4000000E4E4E4B77D8F9AA1AAB2BABEBFC1C2C1BCB4A99884B4E4E4E4000000E4E4E0A883929FA7B0BAC2CACCD0D0CDC6BDB2A18DA8EAE4E4000000E4E8BF998794A1ABB4BF' $text &= 'C8D3D9DDDCD7CEC4B9A7939FE4E4E4000000E4E4E0A98493A2AEB9C5CDD9E2E7E9E4DBCEBFA891AEE4E4E4000000E4E4E4B77F91A1AEBBC9D2E0EBF2F5F3E9D7C2A68BBAE4E4E4000000E4' $text &= 'E4E4B17A8FA0ACB9CAD8E8F4FBFDFDF3DEC4A485B5E4E4E4000000E4E4E4C18D8E98A8B6C7D7E9F6FFFFFFF8DABB9F8DBCE4E4E4000000E4E4E4DDB1928FA3B0C0CEE0EFFBFFFFEECBAB9D' $text &= 'A5D0E4E4E4000000E4E4E4E4D89B8596A4B6C2D1DDEBEEE7D1B2949DD1E4E4E4E4000000E4E4E4E4E4BF9E9B9BA2AABAC9D2D1C7B4A59FBCE4E4E4E4E4000000E4E4E4E4E4E4DAB698878C' $text &= 'A5BFBDB4B1AAAED3E4E4E4E4E4E4000000E4E4E4E4E4E4E4DFC6B6B9BCBEC6CDCFCED5E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4' $text &= 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E40000000000' Return $text EndFunc Edited December 21, 2010 by RagsRevenge
smashly Posted December 21, 2010 Posted December 21, 2010 (edited) Hi, Use GUICtrlSendMsg() ..expandcollapse popup#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GDIplus.au3> #include <Memory.au3> #include <ButtonConstants.au3> Global Const $IMAGE_BITMAP = 0 ; Added for GUICtrlSendMsg() Global $bitmap_from_file _GDIPlus_Startup() $bitmap_from_file = Load_BMP_From_Mem(imButExp()) ;$saveFile = _GDIPlus_ImageSaveToFile ($bitmap_from_file, "c:\temp\Travel1DC.bmp") #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 267, 250, 193, 125) $iButton = GUICtrlCreateButton("", 10, 15, 44, 44, $BS_BITMAP) ; Added this, also changed return in Load_BMP_From_Mem() function , see below. GUICtrlSendMsg($iButton, $BM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file) ;~ GUICtrlSetImage(-1, $bitmap_from_file) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### #cs Experimentation Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($Form1) Local $bg_w = 10, $bg_h = 60 Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics(100, 100, $hGraphic) Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsClear($hContext) _GDIPlus_GraphicsDrawImageRect($hContext, $hImage, 0, 0, 100, 100) _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 97, 30, 100, 100) local $hGUI = WinGetHandle("Form1") _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW) _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0) _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE) #ce While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ;$saveFile = _GDIPlus_ImageSaveToFile ($bitmap_from_file, "c:\temp\Travel1DC.bmp") ;works!!! _GDIPlus_Shutdown() Func Load_BMP_From_Mem($pic) ;coded by UEZ. Thanks to ProgAndy for mem allocation lines Local $memBitmap, $len, $tMem, $hImage, $hData, $pData, $hStream, $hBitmapFromStream, $hBitmap $memBitmap = Binary($pic) ;load image saved in variable (memory) and convert it to binary $len = BinaryLen($memBitmap) ;get length of image $hData = _MemGlobalAlloc($len, 0x0002) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) $pData = _MemGlobalLock($hData) ;translate the handle into a pointer $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE $hStream = _WinAPI_CreateStreamOnHGlobal($pData) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents $hBitmapFromStream = _GDIPlus_BitmapCreateFromStream($hStream) ;Creates a Bitmap object based on an IStream COM interface $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmapFromStream) ;Create HBITMAP _GDIPlus_ImageDispose($hBitmapFromStream) ; Dispose of $hBitmapFromStream object $tMem = "" Return $hBitmap ; Return HBITMAP EndFunc Func _WinAPI_CreateStreamOnHGlobal($hGlobal = 0, $fDeleteOnRelease = True) Local $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "hwnd", $hGlobal, "int", $fDeleteOnRelease, "ptr*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[3] EndFunc ;==>_WinAPI_CreateStreamOnHGlobal Func _GDIPlus_BitmapCreateFromStream($pStream) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_BitmapCreateFromStream Func imButExp() Local $text = '' $text &= '0x424DF406000000000000360400002800000019000000190000000100080000000000BE020000120B0000120B000000000000000000000000000001010100020202000303030004040400' $text &= '05050500060606000707070008080800090909000A0A0A000B0B0B000C0C0C000D0D0D000E0E0E000F0F0F0010101000111111001212120013131300141414001515150016161600171717' $text &= '0018181800191919001A1A1A001B1B1B001C1C1C001D1D1D001E1E1E001F1F1F00202020002121210022222200232323002424240025252500262626002727270028282800292929002A2A' $text &= '2A002B2B2B002C2C2C002D2D2D002E2E2E002F2F2F00303030003131310032323200333333003434340035353500363636003737370038383800393939003A3A3A003B3B3B003C3C3C003D' $text &= '3D3D003E3E3E003F3F3F00404040004141410042424200434343004444440045454500464646004747470048484800494949004A4A4A004B4B4B004C4C4C004D4D4D004E4E4E004F4F4F00' $text &= '505050005151510052525200535353005454540055555500565656005757570058585800595959005A5A5A005B5B5B005C5C5C005D5D5D005E5E5E005F5F5F006060600061616100626262' $text &= '00636363006464640065656500666666006767670068686800696969006A6A6A006B6B6B006C6C6C006D6D6D006E6E6E006F6F6F0070707000717171007272720073737300747474007575' $text &= '7500767676007777770078787800797979007A7A7A007B7B7B007C7C7C007D7D7D007E7E7E007F7F7F00808080008181810082828200838383008484840085858500868686008787870088' $text &= '888800898989008A8A8A008B8B8B008C8C8C008D8D8D008E8E8E008F8F8F00909090009191910092929200939393009494940095959500969696009797970098989800999999009A9A9A00' $text &= '9B9B9B009C9C9C009D9D9D009E9E9E009F9F9F00A0A0A000A1A1A100A2A2A200A3A3A300A4A4A400A5A5A500A6A6A600A7A7A700A8A8A800A9A9A900AAAAAA00ABABAB00ACACAC00ADADAD' $text &= '00AEAEAE00AFAFAF00B0B0B000B1B1B100B2B2B200B3B3B300B4B4B400B5B5B500B6B6B600B7B7B700B8B8B800B9B9B900BABABA00BBBBBB00BCBCBC00BDBDBD00BEBEBE00BFBFBF00C0C0' $text &= 'C000C1C1C100C2C2C200C3C3C300C4C4C400C5C5C500C6C6C600C7C7C700C8C8C800C9C9C900CACACA00CBCBCB00CCCCCC00CDCDCD00CECECE00CFCFCF00D0D0D000D1D1D100D2D2D200D3' $text &= 'D3D300D4D4D400D5D5D500D6D6D600D7D7D700D8D8D800D9D9D900DADADA00DBDBDB00DCDCDC00DDDDDD00DEDEDE00DFDFDF00E0E0E000E1E1E100E2E2E200E3E3E300E4E4E400E5E5E500' $text &= 'E6E6E600E7E7E700E8E8E800E9E9E900EAEAEA00EBEBEB00ECECEC00EDEDED00EEEEEE00EFEFEF00F0F0F000F1F1F100F2F2F200F3F3F300F4F4F400F5F5F500F6F6F600F7F7F700F8F8F8' $text &= '00F9F9F900FAFAFA00FBFBFB00FCFCFC00FDFDFD00FEFEFE00FFFFFF00E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4' $text &= 'E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4EAE4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4C9B7B0B3A79AA2AFB2B4C1E4E4E4E4E4E4E4000000E4E4E4E4E4F0C9967E' $text &= '767B8187847E7C7B8BC3E4E4E4E4E4E4000000E4E4E4E4F5B08B8986888C90928F8B8B898987ACE4E4E4E4E4000000E4E4E4EDCA8C77898F94989A9B9A9898938C7889C4E4E4E4E4000000' $text &= 'E4E4E4CC998A8993979B9FA2A3A4A3A19C968F8C8CC1E4E4E4000000E4E4E4B9808990969DA3A7ABACADABA8A59F988C7CB6E4E4E4000000E4E4E4B2798C969BA4ACB1B6B7B8B6B4B0ABA1' $text &= '927FB4E4E4E4000000E4E4E4B77D8F9AA1AAB2BABEBFC1C2C1BCB4A99884B4E4E4E4000000E4E4E0A883929FA7B0BAC2CACCD0D0CDC6BDB2A18DA8EAE4E4000000E4E8BF998794A1ABB4BF' $text &= 'C8D3D9DDDCD7CEC4B9A7939FE4E4E4000000E4E4E0A98493A2AEB9C5CDD9E2E7E9E4DBCEBFA891AEE4E4E4000000E4E4E4B77F91A1AEBBC9D2E0EBF2F5F3E9D7C2A68BBAE4E4E4000000E4' $text &= 'E4E4B17A8FA0ACB9CAD8E8F4FBFDFDF3DEC4A485B5E4E4E4000000E4E4E4C18D8E98A8B6C7D7E9F6FFFFFFF8DABB9F8DBCE4E4E4000000E4E4E4DDB1928FA3B0C0CEE0EFFBFFFFEECBAB9D' $text &= 'A5D0E4E4E4000000E4E4E4E4D89B8596A4B6C2D1DDEBEEE7D1B2949DD1E4E4E4E4000000E4E4E4E4E4BF9E9B9BA2AABAC9D2D1C7B4A59FBCE4E4E4E4E4000000E4E4E4E4E4E4DAB698878C' $text &= 'A5BFBDB4B1AAAED3E4E4E4E4E4E4000000E4E4E4E4E4E4E4DFC6B6B9BCBEC6CDCFCED5E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4' $text &= 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E40000000000' Return $text EndFunc Cheers Edited December 21, 2010 by smashly
RagsRevenge Posted December 21, 2010 Author Posted December 21, 2010 Thanks Smashly (and UEZ & ProgAndy), I've been trying to figure that out on and off for weeks. Here's cleaned up code for others looking for a solution. expandcollapse popup#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GDIplus.au3> #include <Memory.au3> #include <ButtonConstants.au3> Global Const $IMAGE_BITMAP = 0 ; Added for GUICtrlSendMsg() Global $bitmap_from_file _GDIPlus_Startup() $bitmap_from_file = Load_BMP_From_Mem_Return_hBitmap(imButExp()) #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 267, 250, 193, 125) $iButton = GUICtrlCreateButton("", 10, 15, 44, 44, $BS_BITMAP) $iButton2 = GUICtrlCreateButton("", 10, 105, 44, 44, $BS_BITMAP) GUICtrlSendMsg($iButton, $BM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file) GUICtrlSendMsg($iButton2, $BM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE _GDIPlus_Shutdown() Exit EndSwitch WEnd Func Load_BMP_From_Mem_Return_hBitmap($pic) Local $hBitmap, $h_BitmapFromStream $h_BitmapFromStream = Load_BMP_From_Mem($pic) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($h_BitmapFromStream) ;Create HBITMAP _GDIPlus_ImageDispose($h_BitmapFromStream) ; Dispose of $hBitmapFromStream object Return $hBitmap ; Return HBITMAP EndFunc Func Load_BMP_From_Mem($pic) ;coded by UEZ. Thanks to ProgAndy for mem allocation lines Local $memBitmap, $len, $tMem, $hImage $memBitmap = Binary($pic) ;load image saved in variable (memory) and convert it to binary $len = BinaryLen($memBitmap) ;get length of image $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) $pData = _MemGlobalLock($hData) ;translate the handle into a pointer $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE $hStream = _WinAPI_CreateStreamOnHGlobal($pData) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents $hBitmapFromStream = _GDIPlus_BitmapCreateFromStream($hStream) ;Creates a Bitmap object based on an IStream COM interface $tMem = "" Return $hBitmapFromStream EndFunc Func _WinAPI_CreateStreamOnHGlobal($hGlobal = 0, $fDeleteOnRelease = True) Local $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "hwnd", $hGlobal, "int", $fDeleteOnRelease, "ptr*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[3] EndFunc ;==>_WinAPI_CreateStreamOnHGlobal Func _GDIPlus_BitmapCreateFromStream($pStream) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_BitmapCreateFromStream Func imButExp() Local $text = '' $text &= '0x424DF406000000000000360400002800000019000000190000000100080000000000BE020000120B0000120B000000000000000000000000000001010100020202000303030004040400' $text &= '05050500060606000707070008080800090909000A0A0A000B0B0B000C0C0C000D0D0D000E0E0E000F0F0F0010101000111111001212120013131300141414001515150016161600171717' $text &= '0018181800191919001A1A1A001B1B1B001C1C1C001D1D1D001E1E1E001F1F1F00202020002121210022222200232323002424240025252500262626002727270028282800292929002A2A' $text &= '2A002B2B2B002C2C2C002D2D2D002E2E2E002F2F2F00303030003131310032323200333333003434340035353500363636003737370038383800393939003A3A3A003B3B3B003C3C3C003D' $text &= '3D3D003E3E3E003F3F3F00404040004141410042424200434343004444440045454500464646004747470048484800494949004A4A4A004B4B4B004C4C4C004D4D4D004E4E4E004F4F4F00' $text &= '505050005151510052525200535353005454540055555500565656005757570058585800595959005A5A5A005B5B5B005C5C5C005D5D5D005E5E5E005F5F5F006060600061616100626262' $text &= '00636363006464640065656500666666006767670068686800696969006A6A6A006B6B6B006C6C6C006D6D6D006E6E6E006F6F6F0070707000717171007272720073737300747474007575' $text &= '7500767676007777770078787800797979007A7A7A007B7B7B007C7C7C007D7D7D007E7E7E007F7F7F00808080008181810082828200838383008484840085858500868686008787870088' $text &= '888800898989008A8A8A008B8B8B008C8C8C008D8D8D008E8E8E008F8F8F00909090009191910092929200939393009494940095959500969696009797970098989800999999009A9A9A00' $text &= '9B9B9B009C9C9C009D9D9D009E9E9E009F9F9F00A0A0A000A1A1A100A2A2A200A3A3A300A4A4A400A5A5A500A6A6A600A7A7A700A8A8A800A9A9A900AAAAAA00ABABAB00ACACAC00ADADAD' $text &= '00AEAEAE00AFAFAF00B0B0B000B1B1B100B2B2B200B3B3B300B4B4B400B5B5B500B6B6B600B7B7B700B8B8B800B9B9B900BABABA00BBBBBB00BCBCBC00BDBDBD00BEBEBE00BFBFBF00C0C0' $text &= 'C000C1C1C100C2C2C200C3C3C300C4C4C400C5C5C500C6C6C600C7C7C700C8C8C800C9C9C900CACACA00CBCBCB00CCCCCC00CDCDCD00CECECE00CFCFCF00D0D0D000D1D1D100D2D2D200D3' $text &= 'D3D300D4D4D400D5D5D500D6D6D600D7D7D700D8D8D800D9D9D900DADADA00DBDBDB00DCDCDC00DDDDDD00DEDEDE00DFDFDF00E0E0E000E1E1E100E2E2E200E3E3E300E4E4E400E5E5E500' $text &= 'E6E6E600E7E7E700E8E8E800E9E9E900EAEAEA00EBEBEB00ECECEC00EDEDED00EEEEEE00EFEFEF00F0F0F000F1F1F100F2F2F200F3F3F300F4F4F400F5F5F500F6F6F600F7F7F700F8F8F8' $text &= '00F9F9F900FAFAFA00FBFBFB00FCFCFC00FDFDFD00FEFEFE00FFFFFF00E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4' $text &= 'E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4EAE4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4C9B7B0B3A79AA2AFB2B4C1E4E4E4E4E4E4E4000000E4E4E4E4E4F0C9967E' $text &= '767B8187847E7C7B8BC3E4E4E4E4E4E4000000E4E4E4E4F5B08B8986888C90928F8B8B898987ACE4E4E4E4E4000000E4E4E4EDCA8C77898F94989A9B9A9898938C7889C4E4E4E4E4000000' $text &= 'E4E4E4CC998A8993979B9FA2A3A4A3A19C968F8C8CC1E4E4E4000000E4E4E4B9808990969DA3A7ABACADABA8A59F988C7CB6E4E4E4000000E4E4E4B2798C969BA4ACB1B6B7B8B6B4B0ABA1' $text &= '927FB4E4E4E4000000E4E4E4B77D8F9AA1AAB2BABEBFC1C2C1BCB4A99884B4E4E4E4000000E4E4E0A883929FA7B0BAC2CACCD0D0CDC6BDB2A18DA8EAE4E4000000E4E8BF998794A1ABB4BF' $text &= 'C8D3D9DDDCD7CEC4B9A7939FE4E4E4000000E4E4E0A98493A2AEB9C5CDD9E2E7E9E4DBCEBFA891AEE4E4E4000000E4E4E4B77F91A1AEBBC9D2E0EBF2F5F3E9D7C2A68BBAE4E4E4000000E4' $text &= 'E4E4B17A8FA0ACB9CAD8E8F4FBFDFDF3DEC4A485B5E4E4E4000000E4E4E4C18D8E98A8B6C7D7E9F6FFFFFFF8DABB9F8DBCE4E4E4000000E4E4E4DDB1928FA3B0C0CEE0EFFBFFFFEECBAB9D' $text &= 'A5D0E4E4E4000000E4E4E4E4D89B8596A4B6C2D1DDEBEEE7D1B2949DD1E4E4E4E4000000E4E4E4E4E4BF9E9B9BA2AABAC9D2D1C7B4A59FBCE4E4E4E4E4000000E4E4E4E4E4E4DAB698878C' $text &= 'A5BFBDB4B1AAAED3E4E4E4E4E4E4000000E4E4E4E4E4E4E4DFC6B6B9BCBEC6CDCFCED5E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4' $text &= 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4000000E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E40000000000' Return $text EndFunc
trancexx Posted December 21, 2010 Posted December 21, 2010 Nevertheless, it would be better to use imagelist. Instead of those two lines, this: ;GUICtrlSendMsg($iButton, $BM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file) ;GUICtrlSendMsg($iButton2, $BM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file) $hImageList = _GUIImageList_Create(24, 24, 5, 5) _GUIImageList_Add($hImageList, $bitmap_from_file) _WinAPI_DeleteObject($bitmap_from_file) _GUICtrlButton_SetImageList($iButton, $hImageList, 4) _GUICtrlButton_SetImageList($iButton2, $hImageList, 4) That way the result will be the same regardless of the system. ♡♡♡ . eMyvnE
RagsRevenge Posted December 21, 2010 Author Posted December 21, 2010 Is there a similar method available for setting the photo of a Picture control as created by GUICtrlCreatePic or will I have to use _GDIPlus_GraphicsDrawImageRect. At the moment, my program is reading bmp files 6 times a second to update a Pic control, which I want to avoid for obvious reasons. The following code inserted into the above code doesn't work: $iPic = GUICtrlCreatePic("", 10, 10, 43, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS)) GUICtrlSendMsg($iPic, $BM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file)
RagsRevenge Posted December 21, 2010 Author Posted December 21, 2010 (edited) Is there a similar method available for setting the photo of a Picture control as created by GUICtrlCreatePic or will I have to use _GDIPlus_GraphicsDrawImageRect. At the moment, my program is reading bmp files 6 times a second to update a Pic control, which I want to avoid for obvious reasons. The following code inserted into the above code doesn't work: $iPic = GUICtrlCreatePic("", 10, 10, 43, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS)) GUICtrlSendMsg($iPic, $BM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file) I can answer my own question. I found _SetImageBinaryToCtrl by Prog@ndy and Zedna, which does what I need. Basically, $imGreenLamp = imGreenLamp() ;function which contains the image in binary _SetImageBinaryToCtrl($iPic, $imGreenLamp) Edited December 21, 2010 by RagsRevenge
guinness Posted December 21, 2010 Posted December 21, 2010 I can answer my own question. I found _SetImageBinaryToCtrl by Prog@ndy and Zedna, which does what I need.It's what I use and have had no problems. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
Zedna Posted December 21, 2010 Posted December 21, 2010 (edited) Is there a similar method available for setting the photo of a Picture control as created by GUICtrlCreatePic or will I have to use _GDIPlus_GraphicsDrawImageRect. At the moment, my program is reading bmp files 6 times a second to update a Pic control, which I want to avoid for obvious reasons. The following code inserted into the above code doesn't work: $iPic = GUICtrlCreatePic("", 10, 10, 43, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS)) GUICtrlSendMsg($iPic, $BM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file) Look at my Resource UDF. In sources of _SetBitmapToCtrl() you will see that message/style $BM_SETIMAGE/$BS_BITMAP is used for buttons and $STM_SETIMAGE/$SS_BITMAP is used for other static type of controls. So try: $iPic = GUICtrlCreatePic("", 10, 10, 43, 50, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS)) GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $bitmap_from_file) Edited December 21, 2010 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now