Автор Тема: [Графика GDIPlus] Создание hImage из Bitmap  (Прочитано 13462 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Всем привет  :).
У меня имеется Bitmap картинки, нужно создать из него hImage
в GDIPlus.
Заранее спасибо.  :IL_AutoIt_1:

Русское сообщество AutoIt

[Графика GDIPlus] Создание hImage из Bitmap
« Отправлен: Май 07, 2012, 21:57:07 »

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875

  • Автор темы
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #1, Отправлен: Май 07, 2012, 22:36:30 »
Создал так:
Код: AutoIt [Выделить]
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
 

Но заместо прозрачности png получил черный фон, как можно это исправить?

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #2, Отправлен: Май 07, 2012, 22:44:40 »
Когда ты научишься правильно задавать вопросы?

У меня имеется Bitmap картинки, нужно создать из него hImage
в GDIPlus.

Что такое "Bitmap" - файл .bmp или дескриптор HBITMAP? И причем тут PNG?


Думай, прежде чем говорить.

Русское сообщество AutoIt

Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #2 Отправлен: Май 07, 2012, 22:44:40 »

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875

  • Автор темы
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #3, Отправлен: Май 07, 2012, 22:50:18 »
Дескриптор :)
А конкретнее вот:
Код: AutoIt [Выделить]
#Include <WinAPIEx.au3>
#include <GDIPlus.au3>
#include <Memory.au3>
#include <Misc.au3>
#Include <Math.au3>
#include <SendMessage.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 359, 158, 206, 133)
Global $sData  = '0x'
$sData  &= '89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C00000879494441545847D55669505457167E63CD1FB3B84D32DADD22A046A51B1444C55DE316C3988C131D331893E898940B9AB8EB189744A3924946C538155092C2B5585C0071A1A159544414010197B80D0888AC4DEF7B7FF3DD564934C6C4C964AAE6559DBAEFDD77CFF9BEEF9C73EF7B92F4FF7AAD95A467764A52C71849926F91A476FF0B1DAD522469689AACF527A706F438913F617869C19B7F28BF10F65A65C1A471DFE68DEE9FABE9D1313AF959694ABC24BDF85F2574B48DF4E6C9E06E272F4E9F8C86AF36C39276048E823CB8AE96C275ED329CA585B09FCA8421712F2AD62CC6F9D0A1B732BC9F5DB79F19FA4544A8A47B762FF9E1ABB3DE82313901D6D22258AF94C25A560C6B7101AC85E76029CC87B5E83CAC2585B05E2EB9F73EEF24EAB66EC4D9B1213752DB4B53FE2312496DA597F386F52E6FA462F3857C02118C81AD7939B071B43F62624E9858633E970BF3C50B30A51F43D9FB5391EEDBF6E3A72271EC056944FED890A6E6F83D30E69F8629271DD62C356CD96A3868CE1C355C9CFBBE893907CDCEF7569A99EB8DA7B33C56BE623ED25FFA7DC4CF2271A88DD42D77B0FFEDA6BD31D03388E94432AC6929B0B3EE2EF511B86950A702E934750A9F53800C719FEA7927CCC1B536FA98E9ABE7BC3EF304AECDFF2BD2BC9E9BF5441290A456997EB22335116BA13B9E0C43523C2CACBD232501EE944420F50070F42070EC10DCA9893013C8A03901379FC51C8ED2C49AE47838E963A5AF89319AE9ABE578FE8F2FEB92DB4BAA1F25715CF1DC9FCBC226A031711F7471BB608EDF057BC26EB813770307F70287F733781CDC07F7C1987A10B6FA5A18586F97984F89F7BCB327C511340EAEB85838E96B610C03EF9B0EEC43EDD6086405FA1C7A2C011E2CBFCDEAE373A6E68BF568DAB31386D828587745C3BD271AD81703C47D032430E8FEAF61484E24781DC4A5678D5DF1B1C0813D9EF77A66C1525B03E30112DE1505FBEE6898386A63BF42C39E1814FD25D499FABC14F20312DC2E830B268C70D5454742CBCE37456D8173C756207A0B10B30D88DD0EC7D75F4277380EB6A6460FB8B8746C381749DA7747C141101B47536931CCD7AFC21AB5196EC6B0446F858E31EB7744A26AED5268FC64DB7F4040EDDD76DDAD79D3511B1901DD960DB0466E843372130C3B2361DCBD03069A2EE5001C7A5D0BB8B869561F858D40CD9AE3D0A7A5C219F50F1863BE84E56E0DF44CBF3B7203EC8C6560CC7A9AC870EEC8E04B9F4BD2B30F91C80EF44DBBCDED5217B11AFA4DAB60FF6C356C9B3E4273C159D80D06D809EC72381E02170FDAA3491E005D129BAEAE16FA9DDBE0D8BC1EFA931A18CEE7C1CE18CEBFAF8191711B377E843B6CF00B7F1A63496E27F56E21C013AF75EE205559A520B066110C6B17C3F1C912D8D62C8481E97CD2D578381EAE2F3E86850046AED51F4B86336215742C87916530AD5B0637639918B371F522966009BE9D36116AC533A12D041224A9D399617D2A2A9786A376E91C1896CF8563C53CD896CD819E27E093AE8684BD707DBAC2635A767A737E2EEC029047B1E17229F4EB96C3FDB770985784A391F1AA96CFC38DE99390EED3EE9DEF32D0A1B52227D0B7EAD68CC9A85D30137A9A63E14CD83E78173A7E749E74D5EFFB06CED50BE066B69AB8739AF24EC1B6721E53BE0AFA9222E8567D08F78219302D7C0F8D8C7B7BFE0C5C7E7508D45D3BCC6821901AD0A57D66CF8ED74BFB76C5EDD0C1689EF61A1CB3C2609D1D86E673679E48A02E361ACE65B3615FFC3EB4A987A03D72108E4533D1CC3E1204F41FCE803B9C1FB399937177F2585C191E8042951CE93D3B4D6A21C033A055965276A6982FAE07C851D7D7079611FE308FEB87862C9EF9A4E0FC111AB531FF849320DA951FC070ED2A1A36AC84734E181AB77F0E2D8F60F3EB43E1181B0CEDC09750D1BB334A54329C56CADDD9FEF2410FED824C3FF98E22FFCEB8DAC70B7702BBC0D0B70B2CB4BB6F8C467DF834D4CD9D863B9B56C36E343E44E5CEE60D3051593501EFEEDA01F3C4E1D0BFD21F8DDC9E354B98992005E378A33EA80B6E067AE1624067506C7586BFEFC3FF0A6A3FF994732A054A7A7BA1828B1B837D601FD015E8E70DF7C0AE700FEF05FD909EB8CD5A5A9B1A5A4854F260B18D0942C3C411D08E0F8163A43FAAE7BF8BA6D3D9A81FD20BEE01BED0F7F3C59D206F8FB8628AD4F829F873F5C895D243F642969FACAA880CAF91E95D3AE8FBFBC215D20D18E6078C0904C6F78399F795B3A7C2545DE921210838C60503A121C02BC1A899341A4DFC7FA87E6F0A1C7DBD60A588068AF917B37A91E284488DB2F3D4C77E0F3294B2F585245042A6E574A8A7A39924DC03496238498CEE4390BEB00EEB85CAB75F87A1FC262A3F5D09C728CEBFDA1F181B84BA49A3501DFE0E8C415E70105CDBCF07D5147385A28AFCBDA85E7E25A9E7EF9E7F3C01D6255B292F170B2F9344E5FD527848884C0CED098C547988D887F44055D878DC2411E7A8807BE438BA396F0F5478C09B99FA1A825FA798A2002F9CF5A8973D5EFD0346194AC5E45C2EF434245957914403778591244450F7201221089805177BC33AB0FBBDECB03F30A8BBA764D6FE02DCC7037EE37EEA05018D5211C77F8EDFFCE49F51864AB6EE3C098886118D53C120B5EC64A1C844B3918820E30A2121023A398A86B590A4683851739176A1'
$sData  &= '5CD4BD98E0594AF939D1673F09FE60814629FF4CA44C389791845052C5A08288D82142A18E600FAC8973F5CC94E876D1709E8EA76FB1D8767EF27C8D5F27EF9F0DFE60617A2FF9DC1CA5BCB994818412D11742956850D11F8290289118C5D6BD791F586CE512FAE45340A64ABEFFA9943FCA52A352F4C9512912787A3944D032067F6097484890BA747FCE33728D281F0FB6D27495E2BB0FCE53CB7FC441A3920F66D06DCC48C949A5CC7281208534B163C4789A6A7354F28A4CA5FC70A652F6D6B1EE1DDAFC52CCC7FAC70FECDC3AC35FD15BEDA708E589F6369B6BBA5AD5E90D966B50AAF2C54EBF0AE8AF19F4DFAA8C48CD302C16E90000000049454E44AE426082'

$Pic1 = GUICtrlCreatePic("", 0, 0, 32, 32)
$iPic = GUICtrlGetHandle($Pic1)
_GDIPlus_Startup()
Local $hImage = _GAPIPlus_ImageCreateFromBinary($sData)
Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
;GUICtrlSetImage($i_Pic,'')
_WinAPI_DeleteObject(_SendMessage($iPic, 0x0172, 0, $hBitmap))
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
_WinAPI_RedrawWindow($iPic)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

    EndSwitch
WEnd

Func _GAPIPlus_ImageCreateFromBinary(ByRef $Binary)
    Local $hBitmap = _GAPIPlus_BitmapCreateFromBirary($Binary)
    Local $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    _WinAPI_DeleteObject($hBitmap)
    Return $hImage
EndFunc

Func _GAPIPlus_BitmapCreateFromBirary(ByRef $Binary)
    Local $picdata, $nSize, $picstruct, $Pointer
    $picdata = Binary($Binary)
    $nSize = BinaryLen($picdata)
    $picstruct = DllStructCreate("byte[" & $nSize & "]")
    DllStructSetData($picstruct,1,$picdata)
    $Pointer = DllStructGetPtr($picstruct)
    ;---- Часть 2 ----
    Local $hData, $pData, $pStream, $pBitmap, $hBitmap
    $hData = _MemGlobalAlloc($nSize,2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($Pointer,$pData,$nSize)
    _MemGlobalUnlock($hData)
    $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
    $pStream = $pStream[3]
    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
    $pBitmap = $pBitmap[2]
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap)
    If @error Then SetError(3, 0, 0)
    ;_GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    _WinAPI_DeleteObject($pStream)
    _MemGlobalFree($hData)
    ;-----------------
    DllStructSetData($picstruct,1,0) ; отчищаем структуру.
    $picstruct = "" ; отчищаем структуру.
    Return $hBitmap
EndFunc
 


Я делаю функцию создание hImage из бинарного кода.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #4, Отправлен: Май 07, 2012, 23:06:42 »
Код: AutoIt [Выделить]
#include <WinAPIEx.au3>
#include <GDIPlus.au3>
#include <Memory.au3>
#include <Misc.au3>
#include <Math.au3>
#include <SendMessage.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 359, 158, 206, 133)
Global $sData = '0x'
$sData &= '89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C00000879494441545847D55669505457167E63CD1FB3B84D32DADD22A046A51B1444C55DE316C3988C131D331893E898940B9AB8EB189744A3924946C538155092C2B5585C0071A1A159544414010197B80D0888AC4DEF7B7FF3DD564934C6C4C964AAE6559DBAEFDD77CFF9BEEF9C73EF7B92F4FF7AAD95A467764A52C71849926F91A476FF0B1DAD522469689AACF527A706F438913F617869C19B7F28BF10F65A65C1A471DFE68DEE9FABE9D1313AF959694ABC24BDF85F2574B48DF4E6C9E06E272F4E9F8C86AF36C39276048E823CB8AE96C275ED329CA585B09FCA8421712F2AD62CC6F9D0A1B732BC9F5DB79F19FA4544A8A47B762FF9E1ABB3DE82313901D6D22258AF94C25A560C6B7101AC85E76029CC87B5E83CAC2585B05E2EB9F73EEF24EAB66EC4D9B1213752DB4B53FE2312496DA597F386F52E6FA462F3857C02118C81AD7939B071B43F62624E9858633E970BF3C50B30A51F43D9FB5391EEDBF6E3A72271EC056944FED890A6E6F83D30E69F8629271DD62C356CD96A3868CE1C355C9CFBBE893907CDCEF7569A99EB8DA7B33C56BE623ED25FFA7DC4CF2271A88DD42D77B0FFEDA6BD31D03388E94432AC6929B0B3EE2EF511B86950A702E934750A9F53800C719FEA7927CCC1B536FA98E9ABE7BC3EF304AECDFF2BD2BC9E9BF5441290A456997EB22335116BA13B9E0C43523C2CACBD232501EE944420F50070F42070EC10DCA9893013C8A03901379FC51C8ED2C49AE47838E963A5AF89319AE9ABE578FE8F2FEB92DB4BAA1F25715CF1DC9FCBC226A031711F7471BB608EDF057BC26EB813770307F70287F733781CDC07F7C1987A10B6FA5A18586F97984F89F7BCB327C511340EAEB85838E96B610C03EF9B0EEC43EDD6086405FA1C7A2C011E2CBFCDEAE373A6E68BF568DAB31386D828587745C3BD271AD81703C47D032430E8FEAF61484E24781DC4A5678D5DF1B1C0813D9EF77A66C1525B03E30112DE1505FBEE6898386A63BF42C39E1814FD25D499FABC14F20312DC2E830B268C70D5454742CBCE37456D8173C756207A0B10B30D88DD0EC7D75F4277380EB6A6460FB8B8746C381749DA7747C141101B47536931CCD7AFC21AB5196EC6B0446F858E31EB7744A26AED5268FC64DB7F4040EDDD76DDAD79D3511B1901DD960DB0466E843372130C3B2361DCBD03069A2EE5001C7A5D0BB8B869561F858D40CD9AE3D0A7A5C219F50F1863BE84E56E0DF44CBF3B7203EC8C6560CC7A9AC870EEC8E04B9F4BD2B30F91C80EF44DBBCDED5217B11AFA4DAB60FF6C356C9B3E4273C159D80D06D809EC72381E02170FDAA3491E005D129BAEAE16FA9DDBE0D8BC1EFA931A18CEE7C1CE18CEBFAF8191711B377E843B6CF00B7F1A63496E27F56E21C013AF75EE205559A520B066110C6B17C3F1C912D8D62C8481E97CD2D578381EAE2F3E86850046AED51F4B86336215742C87916530AD5B0637639918B371F522966009BE9D36116AC533A12D041224A9D399617D2A2A9786A376E91C1896CF8563C53CD896CD819E27E093AE8684BD707DBAC2635A767A737E2EEC029047B1E17229F4EB96C3FDB770985784A391F1AA96CFC38DE99390EED3EE9DEF32D0A1B52227D0B7EAD68CC9A85D30137A9A63E14CD83E78173A7E749E74D5EFFB06CED50BE066B69AB8739AF24EC1B6721E53BE0AFA9222E8567D08F78219302D7C0F8D8C7B7BFE0C5C7E7508D45D3BCC6821901AD0A57D66CF8ED74BFB76C5EDD0C1689EF61A1CB3C2609D1D86E673679E48A02E361ACE65B3615FFC3EB4A987A03D72108E4533D1CC3E1204F41FCE803B9C1FB399937177F2585C191E8042951CE93D3B4D6A21C033A055965276A6982FAE07C851D7D7079611FE308FEB87862C9EF9A4E0FC111AB531FF849320DA951FC070ED2A1A36AC84734E181AB77F0E2D8F60F3EB43E1181B0CEDC09750D1BB334A54329C56CADDD9FEF2410FED824C3FF98E22FFCEB8DAC70B7702BBC0D0B70B2CB4BB6F8C467DF834D4CD9D863B9B56C36E343E44E5CEE60D3051593501EFEEDA01F3C4E1D0BFD21F8DDC9E354B98992005E378A33EA80B6E067AE1624067506C7586BFEFC3FF0A6A3FF994732A054A7A7BA1828B1B837D601FD015E8E70DF7C0AE700FEF05FD909EB8CD5A5A9B1A5A4854F260B18D0942C3C411D08E0F8163A43FAAE7BF8BA6D3D9A81FD20BEE01BED0F7F3C59D206F8FB8628AD4F829F873F5C895D243F642969FACAA880CAF91E95D3AE8FBFBC215D20D18E6078C0904C6F78399F795B3A7C2545DE921210838C60503A121C02BC1A899341A4DFC7FA87E6F0A1C7DBD60A588068AF917B37A91E284488DB2F3D4C77E0F3294B2F585245042A6E574A8A7A39924DC03496238498CEE4390BEB00EEB85CAB75F87A1FC262A3F5D09C728CEBFDA1F181B84BA49A3501DFE0E8C415E70105CDBCF07D5147385A28AFCBDA85E7E25A9E7EF9E7F3C01D6255B292F170B2F9344E5FD527848884C0CED098C547988D887F44055D878DC2411E7A8807BE438BA396F0F5478C09B99FA1A825FA798A2002F9CF5A8973D5EFD0346194AC5E45C2EF434245957914403778591244450F7201221089805177BC33AB0FBBDECB03F30A8BBA764D6FE02DCC7037EE37EEA05018D5211C77F8EDFFCE49F51864AB6EE3C098886118D53C120B5EC64A1C844B3918820E30A2121023A398A86B590A4683851739176A1'
$sData &= '5CD4BD98E0594AF939D1673F09FE60814629FF4CA44C389791845052C5A08288D82142A18E600FAC8973F5CC94E876D1709E8EA76FB1D8767EF27C8D5F27EF9F0DFE60617A2FF9DC1CA5BCB994818412D11742956850D11F8290289118C5D6BD791F586CE512FAE45340A64ABEFFA9943FCA52A352F4C9512912787A3944D032067F6097484890BA747FCE33728D281F0FB6D27495E2BB0FCE53CB7FC441A3920F66D06DCC48C949A5CC7281208534B163C4789A6A7354F28A4CA5FC70A652F6D6B1EE1DDAFC52CCC7FAC70FECDC3AC35FD15BEDA708E589F6369B6BBA5AD5E90D966B50AAF2C54EBF0AE8AF19F4DFAA8C48CD302C16E90000000049454E44AE426082'

$Pic1 = GUICtrlCreatePic("", 0, 0, 32, 32)
$iPic = GUICtrlGetHandle($Pic1)
_GDIPlus_Startup()
Local $hBitmap = _GAPIPlus_BitmapCreateFromBirary($sData)
;GUICtrlSetImage($i_Pic,'')
_WinAPI_DeleteObject(_SendMessage($iPic, 0x0172, 0, $hBitmap))
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()
_WinAPI_RedrawWindow($iPic)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

    EndSwitch
WEnd

Func _GAPIPlus_BitmapCreateFromBirary(ByRef $Binary)
    Local $picdata, $nSize, $picstruct, $Pointer
    $picdata = Binary($Binary)
    $nSize = BinaryLen($picdata)
    $picstruct = DllStructCreate("byte[" & $nSize & "]")
    DllStructSetData($picstruct, 1, $picdata)
    $Pointer = DllStructGetPtr($picstruct)
    ;---- Часть 2 ----
    Local $hData, $pData, $pStream, $pBitmap, $hBitmap
    $hData = _MemGlobalAlloc($nSize, 2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($Pointer, $pData, $nSize)
    _MemGlobalUnlock($hData)
    $pStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData, "long", 1, "Int*", 0)
    $pStream = $pStream[3]
    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
    $pBitmap = $pBitmap[2]
    $hBitmap = _GDIPlus_BitmapCreateDIBFromBitmap($pBitmap)
    If @error Then SetError(3, 0, 0)
    _GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    _WinAPI_DeleteObject($pStream)
    _MemGlobalFree($hData)
    ;-----------------
;   DllStructSetData($picstruct, 1, 0) ; отчищаем структуру.
;   $picstruct = "" ; отчищаем структуру.
    Return $hBitmap
EndFunc   ;==>_GAPIPlus_BitmapCreateFromBirary

Func _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap)

    Local $tBIHDR, $Ret, $tData, $pBits, $hResult = 0

    $Ret = DllCall($ghGDIPDll, 'uint', 'GdipGetImageDimension', 'ptr', $hBitmap, 'float*', 0, 'float*', 0)
    If (@error) Or ($Ret[0]) Then
        Return 0
    EndIf
    $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $Ret[2], $Ret[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB)
    $pBits = DllStructGetData($tData, 'Scan0')
    If Not $pBits Then
        Return 0
    EndIf
    $tBIHDR = DllStructCreate('dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword')
    DllStructSetData($tBIHDR, 1, DllStructGetSize($tBIHDR))
    DllStructSetData($tBIHDR, 2, $Ret[2])
    DllStructSetData($tBIHDR, 3, $Ret[3])
    DllStructSetData($tBIHDR, 4, 1)
    DllStructSetData($tBIHDR, 5, 32)
    DllStructSetData($tBIHDR, 6, 0)
    $hResult = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBIHDR), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'dword', 0)
    If (Not @error) And ($hResult[0]) Then
        DllCall('gdi32.dll', 'dword', 'SetBitmapBits', 'ptr', $hResult[0], 'dword', $Ret[2] * $Ret[3] * 4, 'ptr', DllStructGetData($tData, 'Scan0'))
        $hResult = $hResult[0]
    Else
        $hResult = 0
    EndIf
    _GDIPlus_BitmapUnlockBits($hBitmap, $tData)
    Return $hResult
EndFunc   ;==>_GDIPlus_BitmapCreateDIBFromBitmap


Русское сообщество AutoIt

Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #4 Отправлен: Май 07, 2012, 23:06:42 »

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875

  • Автор темы
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #5, Отправлен: Май 07, 2012, 23:09:14 »
Спасибо, но я нашел ошибку.
Код: AutoIt [Выделить]
$pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
    $pBitmap = $pBitmap[2]
 


Это уже создание hImage....

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875

  • Автор темы
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #6, Отправлен: Май 07, 2012, 23:11:30 »
Кому нужна функция берите:
Код: AutoIt [Выделить]
Func _GAPIPlus_ImageCreateFromBinary(ByRef $Binary)
    Local $picdata, $nSize, $picstruct, $Pointer
    $picdata = Binary($Binary)
    $nSize = BinaryLen($picdata)
    $picstruct = DllStructCreate("byte[" & $nSize & "]")
    DllStructSetData($picstruct,1,$picdata)
    $Pointer = DllStructGetPtr($picstruct)
    ;---- Часть 2 ----
    Local $hData, $pData, $pStream, $pBitmap, $hBitmap
    $hData = _MemGlobalAlloc($nSize,2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($Pointer,$pData,$nSize)
    _MemGlobalUnlock($hData)
    $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
    $pStream = $pStream[3]
    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
    $pBitmap = $pBitmap[2]
    If @error Then SetError(3, 0, 0)
    ;_GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    _WinAPI_DeleteObject($pStream)
    _MemGlobalFree($hData)
    ;-----------------
    DllStructSetData($picstruct,1,0) ; отчищаем структуру.
    $picstruct = "" ; отчищаем структуру.
    Return $pBitmap
EndFunc
 

Тема решена!

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #7, Отправлен: Май 07, 2012, 23:17:42 »
Если ты хочешь использовать HBITMAP с прозрачностью в стандартных элементах (Pic), то это дожен быть DIB (см. _GDIPlus_BitmapCreateDIBFromBitmap()). Функция _GDIPlus_BitmapCreateHBITMAPFromBitmap() создает DDB.

Русское сообщество AutoIt

Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #7 Отправлен: Май 07, 2012, 23:17:42 »

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875

  • Автор темы
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #8, Отправлен: Май 07, 2012, 23:20:07 »
Хм. Я сейчас исправил у меня получилось то что я хотел.
Вот:
Код: AutoIt [Выделить]
#Include <WinAPIEx.au3>
#include <GDIPlus.au3>
#include <Memory.au3>
#include <Misc.au3>
#Include <Math.au3>
#include <SendMessage.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test", 359, 158, 206, 133)
Global $sData  = '0x'
$sData  &= '89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7AF4000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000206348524D00007A26000080840000FA00000080E8000075300000EA6000003A98000017709CBA513C00000879494441545847D55669505457167E63CD1FB3B84D32DADD22A046A51B1444C55DE316C3988C131D331893E898940B9AB8EB189744A3924946C538155092C2B5585C0071A1A159544414010197B80D0888AC4DEF7B7FF3DD564934C6C4C964AAE6559DBAEFDD77CFF9BEEF9C73EF7B92F4FF7AAD95A467764A52C71849926F91A476FF0B1DAD522469689AACF527A706F438913F617869C19B7F28BF10F65A65C1A471DFE68DEE9FABE9D1313AF959694ABC24BDF85F2574B48DF4E6C9E06E272F4E9F8C86AF36C39276048E823CB8AE96C275ED329CA585B09FCA8421712F2AD62CC6F9D0A1B732BC9F5DB79F19FA4544A8A47B762FF9E1ABB3DE82313901D6D22258AF94C25A560C6B7101AC85E76029CC87B5E83CAC2585B05E2EB9F73EEF24EAB66EC4D9B1213752DB4B53FE2312496DA597F386F52E6FA462F3857C02118C81AD7939B071B43F62624E9858633E970BF3C50B30A51F43D9FB5391EEDBF6E3A72271EC056944FED890A6E6F83D30E69F8629271DD62C356CD96A3868CE1C355C9CFBBE893907CDCEF7569A99EB8DA7B33C56BE623ED25FFA7DC4CF2271A88DD42D77B0FFEDA6BD31D03388E94432AC6929B0B3EE2EF511B86950A702E934750A9F53800C719FEA7927CCC1B536FA98E9ABE7BC3EF304AECDFF2BD2BC9E9BF5441290A456997EB22335116BA13B9E0C43523C2CACBD232501EE944420F50070F42070EC10DCA9893013C8A03901379FC51C8ED2C49AE47838E963A5AF89319AE9ABE578FE8F2FEB92DB4BAA1F25715CF1DC9FCBC226A031711F7471BB608EDF057BC26EB813770307F70287F733781CDC07F7C1987A10B6FA5A18586F97984F89F7BCB327C511340EAEB85838E96B610C03EF9B0EEC43EDD6086405FA1C7A2C011E2CBFCDEAE373A6E68BF568DAB31386D828587745C3BD271AD81703C47D032430E8FEAF61484E24781DC4A5678D5DF1B1C0813D9EF77A66C1525B03E30112DE1505FBEE6898386A63BF42C39E1814FD25D499FABC14F20312DC2E830B268C70D5454742CBCE37456D8173C756207A0B10B30D88DD0EC7D75F4277380EB6A6460FB8B8746C381749DA7747C141101B47536931CCD7AFC21AB5196EC6B0446F858E31EB7744A26AED5268FC64DB7F4040EDDD76DDAD79D3511B1901DD960DB0466E843372130C3B2361DCBD03069A2EE5001C7A5D0BB8B869561F858D40CD9AE3D0A7A5C219F50F1863BE84E56E0DF44CBF3B7203EC8C6560CC7A9AC870EEC8E04B9F4BD2B30F91C80EF44DBBCDED5217B11AFA4DAB60FF6C356C9B3E4273C159D80D06D809EC72381E02170FDAA3491E005D129BAEAE16FA9DDBE0D8BC1EFA931A18CEE7C1CE18CEBFAF8191711B377E843B6CF00B7F1A63496E27F56E21C013AF75EE205559A520B066110C6B17C3F1C912D8D62C8481E97CD2D578381EAE2F3E86850046AED51F4B86336215742C87916530AD5B0637639918B371F522966009BE9D36116AC533A12D041224A9D399617D2A2A9786A376E91C1896CF8563C53CD896CD819E27E093AE8684BD707DBAC2635A767A737E2EEC029047B1E17229F4EB96C3FDB770985784A391F1AA96CFC38DE99390EED3EE9DEF32D0A1B52227D0B7EAD68CC9A85D30137A9A63E14CD83E78173A7E749E74D5EFFB06CED50BE066B69AB8739AF24EC1B6721E53BE0AFA9222E8567D08F78219302D7C0F8D8C7B7BFE0C5C7E7508D45D3BCC6821901AD0A57D66CF8ED74BFB76C5EDD0C1689EF61A1CB3C2609D1D86E673679E48A02E361ACE65B3615FFC3EB4A987A03D72108E4533D1CC3E1204F41FCE803B9C1FB399937177F2585C191E8042951CE93D3B4D6A21C033A055965276A6982FAE07C851D7D7079611FE308FEB87862C9EF9A4E0FC111AB531FF849320DA951FC070ED2A1A36AC84734E181AB77F0E2D8F60F3EB43E1181B0CEDC09750D1BB334A54329C56CADDD9FEF2410FED824C3FF98E22FFCEB8DAC70B7702BBC0D0B70B2CB4BB6F8C467DF834D4CD9D863B9B56C36E343E44E5CEE60D3051593501EFEEDA01F3C4E1D0BFD21F8DDC9E354B98992005E378A33EA80B6E067AE1624067506C7586BFEFC3FF0A6A3FF994732A054A7A7BA1828B1B837D601FD015E8E70DF7C0AE700FEF05FD909EB8CD5A5A9B1A5A4854F260B18D0942C3C411D08E0F8163A43FAAE7BF8BA6D3D9A81FD20BEE01BED0F7F3C59D206F8FB8628AD4F829F873F5C895D243F642969FACAA880CAF91E95D3AE8FBFBC215D20D18E6078C0904C6F78399F795B3A7C2545DE921210838C60503A121C02BC1A899341A4DFC7FA87E6F0A1C7DBD60A588068AF917B37A91E284488DB2F3D4C77E0F3294B2F585245042A6E574A8A7A39924DC03496238498CEE4390BEB00EEB85CAB75F87A1FC262A3F5D09C728CEBFDA1F181B84BA49A3501DFE0E8C415E70105CDBCF07D5147385A28AFCBDA85E7E25A9E7EF9E7F3C01D6255B292F170B2F9344E5FD527848884C0CED098C547988D887F44055D878DC2411E7A8807BE438BA396F0F5478C09B99FA1A825FA798A2002F9CF5A8973D5EFD0346194AC5E45C2EF434245957914403778591244450F7201221089805177BC33AB0FBBDECB03F30A8BBA764D6FE02DCC7037EE37EEA05018D5211C77F8EDFFCE49F51864AB6EE3C098886118D53C120B5EC64A1C844B3918820E30A2121023A398A86B590A4683851739176A1'
$sData  &= '5CD4BD98E0594AF939D1673F09FE60814629FF4CA44C389791845052C5A08288D82142A18E600FAC8973F5CC94E876D1709E8EA76FB1D8767EF27C8D5F27EF9F0DFE60617A2FF9DC1CA5BCB994818412D11742956850D11F8290289118C5D6BD791F586CE512FAE45340A64ABEFFA9943FCA52A352F4C9512912787A3944D032067F6097484890BA747FCE33728D281F0FB6D27495E2BB0FCE53CB7FC441A3920F66D06DCC48C949A5CC7281208534B163C4789A6A7354F28A4CA5FC70A652F6D6B1EE1DDAFC52CCC7FAC70FECDC3AC35FD15BEDA708E589F6369B6BBA5AD5E90D966B50AAF2C54EBF0AE8AF19F4DFAA8C48CD302C16E90000000049454E44AE426082'

$Pic1 = GUICtrlCreatePic("", 0, 0, 32, 32)
$iPic = GUICtrlGetHandle($Pic1)
_GDIPlus_Startup()
Local $hImage = _GAPIPlus_ImageCreateFromBinary($sData)
Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
;GUICtrlSetImage($i_Pic,'')
_WinAPI_DeleteObject(_SendMessage($iPic, 0x0172, 0, $hBitmap))
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
_WinAPI_RedrawWindow($iPic)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

    EndSwitch
WEnd

Func _GAPIPlus_ImageCreateFromBinary(ByRef $Binary)
    Local $picdata, $nSize, $picstruct, $Pointer
    $picdata = Binary($Binary)
    $nSize = BinaryLen($picdata)
    $picstruct = DllStructCreate("byte[" & $nSize & "]")
    DllStructSetData($picstruct,1,$picdata)
    $Pointer = DllStructGetPtr($picstruct)
    ;---- Часть 2 ----
    Local $hData, $pData, $pStream, $pBitmap, $hBitmap
    $hData = _MemGlobalAlloc($nSize,2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($Pointer,$pData,$nSize)
    _MemGlobalUnlock($hData)
    $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
    $pStream = $pStream[3]
    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
    $pBitmap = $pBitmap[2]
    If @error Then SetError(3, 0, 0)
    ;_GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    _WinAPI_DeleteObject($pStream)
    _MemGlobalFree($hData)
    ;-----------------
    DllStructSetData($picstruct,1,0) ; отчищаем структуру.
    $picstruct = "" ; отчищаем структуру.
    Return $pBitmap
EndFunc
 


Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #9, Отправлен: Май 07, 2012, 23:25:13 »
Попробуй с этой картинкой.

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875

  • Автор темы
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #10, Отправлен: Май 07, 2012, 23:28:09 »
По пробовал  :)

Код: AutoIt [Выделить]
#Include <WinAPIEx.au3>
#include <GDIPlus.au3>
#include <Memory.au3>
#include <Misc.au3>
#Include <Math.au3>
#include <SendMessage.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test", 359, 158, 206, 133)
Global $sData  = '0x'
$sData  &= '89504E470D0A1A0A0000000D494844520000006400000064080600000070E29554000020004944415478DAECBC6B9065D775DFF75B6BEF73EEB98FEEE9E9E979603000060F82004882200149242DD1B444F9214B9165CB922CC989629792D81545962DC956E2A4A238FEE00FAE8AABE2E4435291CB9194F253899D28B6EC7228857A51244582101FC301086006338379F474DFBE8F73CFD97BAD7CD8A787206DAB2499941FD1ADBA75A77BEEEDEEB3FF7BFDD77FADF5DF077EE7F13B8FDF79FCCB1FF2EFC2453C7F6B158F36EC1DAE6D7B6BA4BBE6BEEBB06DA07D72CCDCAA282682B9CB810A07471B3BD869E4A00A72FB3D17A6BF03C8BFF0F113D7614BE1E406662BB87C5ED108E2344DB26F7AEBEBFA369DD66FDA9CA83F350F7B13D1C7B62A7BFCB1899DCDEE67BAEC4DEF5836524692E1C91C7330416CF82DA68206B05A39DCF4DCAE95ABA3289792F98D69A4ADC4D3D73EB265FFFF04E41F5C853AC3F60AF61B6524D000930D88F3BEE583F19DE3B8F33527FBBD95768F6CB0A74E79FD5030CE28E8DABC6B4D92434240401122A0E5E9F870A9EE2473BAEC74069DB924C0008B60B570A7522EBB71D992DD185772FB5B9EF8ED05E65F2F203FF30BB0532BEBF1B02415EC1E18AB19EF9A3F30F9EE0BF2C4A3D3FC749B79B3E0E783B39D1D3A1C0353F15A911A218A504B01210238D870750AE08EF9102DC74F739241979D557656C964959C0371B92BCE8D59F09776A27DBA6F6DFF5B9EDEB17F2701097FFDBF8366ACFED0452C9C80F50E98422576B6DDD1DFB3539F79DFA9F8AE374D79779BED91DEBC76241A4411AF45A416A15624824704C505C1F5F8725C30C7CDCBEE071F0072CC45EE7DEDEEDC0307CC9D949C45EF1CACB2DCD8985CA99CDB5BD865C9F6FCF7BCE3C4EADF1940E2CF7F00BA0566130D9EC8AB29B69EF247E3A3F19B1F1BEDE8283D5E45FDE60746F9BDEBECCDC6E85CD0203211210A44C3B5F04FE126F7F20447864B111C640006C7BD50920CDC5422C5CD90843BD9EF019286A8312F18D219FB87592E2F92BCA2C96F9E8CFE4B23FCD560D67EF73B76FE2D06E4C3FF3572E7499534C63A3877EB417EEFF4D1ED6F7A4B7CE4BE5D7D8F28BF7B12790FD899CE482A4250A28AA80A206252FE5A0BE216C08296C5CD8E99D3A66CDD26632993FC1E6739EEAEC7F9C41D2DA0787922C79F37F32200B2D325A7F312699A9DB432AE1D26796991E433B5F1C2D8F3A7B7D5F6BFE79D5F7A1A8B5F7630FEFEF7C3EBDBEACB1E4F957D6FFAFDDB7FF05DF2FE87CFE81F40784E84C7109F64C34454C7915A10B444074D845A452B152A65B5C97EF3E65A6E84CC5573BBB6346E21ECE7CC627F6DAB652F5D9F3DF66631BBD798D7028D961CD304F1AD804C82F84CC52751D91698887823508B100312DDB10C1640B7441E1C577E665F7CF776A7DB87396CAF8DE781ABFF7644C8DFFD31F0CF818D95EE246F4FEFE3DB1F7C78F2F08E7CF5DB1FE4FBEA8AAFEC8D1DF3B2735520AA1004AA2056ABA47120A9B07F7BE52F1D247DE146BBFED5A3DC5D7E68BC75637F25F3C3236B5F3CDC74FFC7354FD7536F0B115D4725AB68246B25AE15A295A1235C2B179D24D5897A9CAAD4E3483D8B342722B359CDF656646716D91B577E7A14D88B22DB417D5B551A552621C8C4058E925CBBDECBC76E6DF423BB7DFA28E6AF36D1EDCFFFAE2F0D857D7922A4ED60FD36657E82AF9CBC2BFEA5F7375F797222DF77668B6FC8CE2C1B8C420161142088A4A01C44931BD9FDD3D717FEAB1F78998FFEECCBDD273F6AF9EA253F32C62DECBE08372F2A368591C2C957E1E97D887B70701EEEEE2ACB4877E0E8DC8ABA0A0AD15555F0E8EA924BFE0916C90ED934248B1395787224F5F94A6617C6B27D66C4EEEEC8F766959F1B473F3D8E9C9BD43C380B9C7FA0F25984D9158B4DC85EC72EBFFC173F30EFFEDBF76DFF1B08C8FFFC13CACDD3CAE2343FF4EC13BBDFFE4CFCF74E4EF981A6E2A96C42AD30AA853A082A1CCCD73C9FE163EE7CE41397FC937FEB527BE9C73A168C33C8C2A8D6CAF850191BB4F7C148607A174EED835670F410DC4CD0D4C65D03BF6DCC7A6C7BAE7453D8AEC145AD1FE35A418A4810D55C2717577157EBAC5B6CB22E2CEB958D2F7EB5F3DB27D5AFDD57E9EC819A9DD323D9DDAD65EFF4D8DE7462E48F4D6A2E9C8DF6741E49BA626AF38DB0E9D3658E55DDBF1180FCD8F3B010E5BAA89AD8DFFD238F5E78F642FC9171CD1F76E44CA5D0D442546C93F8E4ABFBFC33177EF6CA012FFCC24BDCF8D90FD9EAD37567371F3065A48AAB319E2BA335842D584EE0E475D85EC3E23EB87A1E0E5B68D770B434BE7F8F2F5A90F2EFF53F8675309FEFC0D1369C7B597D7EDA7C3985C5367E3851AA46258C20BB6AB69435EB6DC9DDCD6CAB4B0B3FD839E2E69928B3374DF5DA8333AE9C19FB93BB637FEABE989EC94DB04FA798366D587D2972CA972487D43FFA126C24FAA6E2CF7CDDB4FEA6A7C6EF7BDBD9EABF1C57F21C10A3D065E7E6BCE5C31FBFC6FF76F9363F57B91FFCCD0F78BA791B162712B7CEF46C2682478713FBC6F41096BB9046B07D0D1E78194E1B7CF4DD70F3148818CB6BB0BE0EFFE957FDC6FFD8F4E3D0EE403B85C31D685AA83AE5F024DC3A078B99B2AC5197A85D52D314ADCE51D712C79D4F1EAD75E72DDB72F1E2CC9EB87F6C5F5145B6AFA4F8A18F1EC49F3F9ADBC7AE7BBC71F98F56F6AF0D90ED3F7D1D8BC4DAE02F7F7773EE2B1E187FE7DBCED67FAE52CE00DDAAE7E575E21FFDCA95FC533FF62BF6E10F7EA05ACD42D666E4BA3FDD70E3A259DE16C80A0163B20FB30CED04B66EC1C54B706E013A824F3D0D9F7E1059F5E6DFF365A8038EFE6FE8'
$sData  &= '6AE5FA0370B80B37B7546F87C834AB9FCCD13716E5C89B731A76DE76820B6F9ED9130F35F9D95160F7335DF5B3CF1FC887AE2FE485B957FBAF7F47F8EDA7ACFBBF63C5B25DC77163FCF01F9727DEF370F3038FEF567FB80AEC74C9AFDE5AD9DFBFB5F47FF8833FE31FFAF8E7AAD5681534691B6F6FF5ACEE0FB6D9493053C30284358841B70BAB2378F4E370711FC60035BC763F7CFA4168E7F8F7DCF765D1226CFD81CF53DDFE3F85F1C3D8E664E2DA0E12D4742B99CF925D5F996DDA601B0D742E76B149CF5ED0FE1D77C6F1E0F652E6D2752BA0FD6D05E4C21F5AB1AEBA78EA4CA7DFF57E7FE21B9F38F5D7CF4FE373759078F530FFCC0B37DABFF2CA5C3EF6233FCD4ABA099E3D2E7267EBD387D63F3E8653151CB5E015E875601BFC044807177F0D1EBF034187AADBE1F61EA41AE218FE972BF0271EE0CBFAD87D3F7CF2C3C6F494B12BEAC13B97DA34896993B9AB72F0898DC75E547B89FA704CCF3E5CE5B75F1FEBFEAD95ECCBFFBA7CD523602D7CD7A92F2F20E1FB16DCDE1CC6F7BE73D37CE7574CDFFBDE474FFC9573D3F854107FF5235797FFD35FFDB9FDFFE16F7D66B2129A38F58671DB732477AC9D8E8C5D81E9186EAE603436E28BE013905394823AC35105F3045B01E2C0AA175E83ABF7C322C0680BFEC661B9D83083FFE0CB34CFF8D83BC051460E0FBC06A7F7937DE049B40B2667DDF603079F68453B826AC3E46CC86F7AD3D4DE7A65AEB7EF1C71E05BBE80F09BCA27BF2540727D189F7BACABFFE457EFBCFFAB1E98FEE8D9697CEA686D1F7AF1A0FDAB3FF24F6FFED30FBC241D1A23E284A560EB236BEF5B411A29A8B1DF43D51AD556890CD6E0AF0313B01370F55938DA8533AFC1F6118C3B38750DBEEA4370E33C6C46CACAA1776856F0A1978DA32DB80B6C227880EF9EFDE62FEC27D2F1962BCD2C7525186C1DC0D9EBB051A849B65F45A9D6893D6D8F90C5E596FD9D28AF4674BAA576FAA11DBFF8D2815F6355B56C371D7FBB876FABBE4C80FCC09588ADF43B9E3BF9DCBB1E9CFDE8B96978EBEB87F6D17FF2D9E59FFBE17F72E5853B4B83EA3410A93CDAC9EBCAFEFDB795988C64703242DDC0B253BA85D15C2880D081DE82ED0348BB307F0B1C3E0C710D6109173E056F7A059EBC5EDAF4362A8D8DAC90A2926A583430DF2E9BF2C397613D86D5140EB74AF4658C3FF6EBE81855A5CA70F2364C963059C36C01E315BC7C11AE9F85B1C283CBE48B066D5367B5B787268B573AD99F4AB87E4E88171A2E6ECFFCF2E1BCDBE7447F30FC74FBD202F267AF02BD4659D5DFFFBE138F7DCB5B4FFCB5FBA6E1A96B07F9C37FE763EB1FFAF3FFF8F54F5A54451A6333551AB1CAA35549546C1BBADBE09561091E021653B8BD54FAD6901130021AF04BB07D03FA9390B6C0A66013787117AEEDC3CEAB70720DDB2D8C973096F20C194EEAF0C73A780457C8110E4FC0C136CC4F283F7D007D2C4D7791124D421114A7AFC0E397603A07FA02FC720B5E7C0C5E3B5FDEF3E0CBB09A00931408AD8847CBBABAD1DAE264645F353433FCC4DB4EC9231FEAF27E77E00BEE3F4AFCED1BCAB79DB32F1D20DE2262F57FF6757B17BFE7D9ADBF74612B3C7DB8F697FFD1A7377FED3FFF99C34B568528883923238F90B0A253D1EE71B7E9F55D5D44D71C5E8757A6C6FE02B6239C190328AB0D24208B71E7CD703BA321E1E13AC86B789452A1C76D681F802B43F86B289135EA606B0DA30DCC8EA0E921388404D1E1C42DD8BD012A451858805441A6002656DE4B82A32DB87111D60DDC3D05F39DF25E7118F570382DDFEF8C500961295D1769D749DADB9DAD268D2E2C5B7D22CA990B27E4FCE7F6D34D5F87037697F0CFAEC2D75EF8525196D7BFFFC99DBD3FF4D4EC4F3EBA1BBFD68CF4C9D7BB0FFE957F367FBED70052BADC228AABE0FD887EBAD6EBDAEBD9FB2ABBBF3FCD413B6251776AAB16D6198E4630AA2156460D8C4D995AD9B956536D1EC2371DBDAF609D8D6605E3354C5710F3D0104BA00DA4311CEDC0EDF36501ADA42BD4216E4A04D51BA853516F246053549E39B4A34277CB9DC22E210D809651321660D3C07A041351C64E7EDDAD0E3979F42EA7D01D6DE81635DD08EF827B3CD5E8F99B955E5DDCA90F982DC117CADF7AD1F8F647FFD500897FE69A8E47B9F9B6B7CFBEF6AD67E2773681D9B2F3FDFFFD13CB9FFFDC7E5E31A91417080DE2A63EDA1879A2A48EAE59DAF5BAD2ADDCD8A9CD4C4FAF02478B64F3B862E36B7CB38214B424E871E1E8ED683651FA91C36E04A98123653386C35191C03A31422A0B3C4A25F14EEEC26C7F881005CFD08FA09DC1AA2E54B31CA6BCC7B4655E16BCEA212E61BC29916401BA2DE86B48B16480887252CA675E71F2C6E84F38922C9969D76D3C758DDB264AAADDE3B8F29DAD5AF716A6AF92BCA37138DDFF2B46C85FF824A9DF34DFF58E138F7CCD23D57F7172ACE7DC9D570FFB977FEA85F612224A0AD08CD4C9884FA15A299542DF182A9A9A1577472BEE362DE3EDCAB673D43D1F615AD9269BB6BEA127937D69B935684511C1630D418D26C0EC1C4C1CB632340EB48A09E41A7203F393C69D0059CA02BB969AA65A1613851C82B4E58AC3084280D443B72E1195B6A13F557E968C4B74894370A5F202F00AB8E2D0BAD266334FDA27432A3131BADC7BB2DEE88240715A4C76269CBFB55FBD94EE6EDDE4D421D4AAFC8FBF68FCA977FF1601E946F5A951DCFED6778CBFF791DDF0F8F1B79F7FADBF747DEE2B54946C8A8D14DD609AC0A6CAA83389AE580569DBDC9312326B35D6A14780584C3E1646912A07D46B3577DC36203DD01AE64AAB65E10E2AA8CBFC9D660C931A2A87DA21AA3249050828405A001B0333E8CF96216D67'
$sData  &= '6587632577100A75058720946B4985363B8725E5759D61E30A46256651826A556927594D0017B38D997544AB83BA40367456FB6E083E4B3727B76992B17D17B6A7FA2F535DBF3E203F784DE973F3BD5FBDF595EFBC507FA3880CA34FB874B37F759307A9884572B0D2D1728536226EDE08127B93ACAA82E182255577C105EB23F4625AF81E440DAFCCA0061760A5E4D6B03854ECA1ECE01C95758665324255AEAD51880A9516D06A8124A5452F0CD4948B0243CACFCB03FDD0404AB0722501A92B2E98DEA00331238A30126514952654318AE20EB752609337B8B979E7261D2AD96B0B12CD9D51607B34F6EDCD91D6B475CBC1081EB3DF2265E51CDFF9407DFEBB9E9DFCF1ED919C071011D6BDD9AB07E9AE0B91208A98123C2215D46E454E764A6FE6EEEAC18C283A18114CD48BBA3AF685E8E0FEC852165B3162053281D829B206D65692F07A98908F0DADB550532CC9362B908D20A095E27DA19EE09032E40EB297441E04FA047D073116A0F2506CA28A8A4910EAA662AAB5D6413083B10450E3C87B3D4A68DF7983E559C8B67B5FC8171E8C3C3C51767A24AD5D5A9CE56824138235ACC71D951A7B2FC3FFF9227CE3A3BF394046D1B6BFF7DD93F7DC370BEF0A2AF7DEBB49DEAD3A37914216C42A223DC808C48D0A238E0771EF06A698E162C5266266E0F7AC6C140F557194A8808A89490912A90D692845466F483B54F6067909AA43550DC4DA905804860EBBDE42D9F17D5F6A0EAF8AC24AD98AD24A4AEA4B4EA9C5687291D35A158305CE119D26733C0442EED5B2D79E654667DBE01332B560B393533F777A241754BD4E90466A49852EBAECE0799B83B8A019198B93B0E3CA4FDE30BEF3DC6F10901F7C35BEFD5C7DE66DF755BF67675CA2E3F821820A526BF14BD548484401C90A31A16E680F820D546385ABABB213450D1FC029545ABEC6C0B261595D0660342892CBC7A5322482CC003397C10794AC44868B92D320C173C94361038E1172F95EA902C1AC20A96188522D516515E4005E6906B23B98960DE4DD2467DDA6F76D7A99A012A9A550247431F4EAA06BA34B2A9610AB314B4112815D3A9BCBCA16BEAC12D2C1D87E1311927DF6BB1EAB1F79FC74FCEAA0A25F183912C7155B416992480D24342895A44261C11033D44133786F255804302B34E3560A3BA358AE06F7A78895849B81CEDC33E0465250D302B6828A126B13401A291652733304CF0AD9C092E1025994D081F79FDF00A2A57128437ECA4369A25A8A49498A06B46C96E81BD9F1AC67687D42B69A713026DA514B478CA95EF5939D2A9F52D52619ABEC6884988483B6AAF669DCC85DED77570D27260BB6BCCC797E4380FC99CF4592CFDE797FF5F57B53BD0883298DE2221B05D18776E3B9A8FD64036DD99D744888043182198AA1A1ECE88095446AE06E7806B7029A1BB029B6CF925AECF311351D222A9728513740873FC6489DBA089EC5104582A2081A1C2AC52528A666392129E25E953D81A988A30CFEAC08A20AC114F1221E44C1825A47E39D9F63937758DB844A8C5375C734B4282D1A3A3CF0F6D9E6F1B3411E3BCCBADA64E91ACDB34930BD2ED547567598138922AC94135D9E27652F9ACC83F25377CCBFE5D4AF03C8F7BF069E275B53DFFBCA0747EF3D565606B4A9088F7184A7CE5517C7713D5B665FA124D4155259E422E20DB344F0D21251611A893B35F548258E428C75101D07745ABBAA186666AD795A674F7D4EE58974D93525ABD2324B5A24EF7ACFA9ECEE8112DD4030B7AC19238B20561A39488220B8FA3DD3232E787672F98642C408E086B814264D2839ED48E7E7ABD676C85EF75BB1653B76346185861578520FF6DEF1E6C1A7C9DF74F548DBBB99792DD66CD579D2077DFE73542F6401A2E02192A5496C27580ABED516D5F8EB468824C5F3E41DF7378F5DDC8D8F1D278D4D72D683EFD293F0E4D9FAE2F96DDDBB7D97052269F0D82692273CDBB492FAD458B61FDA92DD274E727EABF653276BD93D51B15D09DB517D1645EAA8A25188AA01450D294EC25C7CB66D325F65F755EFB95D65591CF53E5F26962B93C5DAE4A0735FDCE965FEE24AF7179955E7AC8E3A165DA675198A926CE03E44D6F07A2C7F4D743099529CAA6A38114B676463E7A7ADED7A106D77E28A13B1A58A0B426CC9D2ED699EFCBE66F5DC5BEBEE5B5EBC4BF7DA4A2E8DD427679BBC9B918FFC5AAA7FE6A551B5422C12A4ACF66288C0CD04661B18F55F5093FCF38004AFE97DFB5B9F9E3E1B8549B91EA7CDC5C79F1D36D9D9DB0ABB5FF370FDE80BFB9BDB409A55124F9FD0D9A3BB7AFE2D7BBCE5C2168F9C1EC9B95160A7526210A92B9558295AA9C4A84254548B42183AAF83EFB6C8B12285AD90B83B6477CBA5AEB3EC9E92939291924B4A785A1BF3A3CCCD1B1B6EDCD8F8D585C9955BBD5C3B68FD469F6DB1C9BE5875D22D13B649A27D866411F7618652FCDA35BEB9103676FE6497F6FA46ED68ABDAF7892CEA4A1763F57446FBDDA7EAF4D677D4DDD735D91ED99F5BF7B903FDF0D92A9FD9A9BDBB6BD5DF7971133FF89930AA19C920034DC14A117D188C93B98C06CEDF801FCFCA779741D61702F2C3D72077CDD624EC3EF7C0E8198A519CDE0A08ED1021A58890C937BF75F2DCA5BB76707A2F344F9C094F5DD892C7766AD9AB8A2F17393E1C2398222A83F9B9EB7DB532B364A44DF2AECBDE6DB2A72E7BD7195D7252724FBDD12597AE37BAECA48474D94919E94C34659754CE7D38A3403DABA8A75126E7220F3E30E589A0D4C9896BA75BE4305F640EDACCEDE4DC16E7D0D1799F65817B279E1290F6DBBC375FA433F5DA4EF675B06E120E2795ED8EC5F594A4FBB6825FDC537BA4113FB3E858CD3B9F'
$sData  &= 'F72ED71ED8627F61E1FFF9E03AFED2CB34FB2AD4046F70FFBC208A19660A6B534E2A6C1A430D1EBB0A7FDBE1DBE48B234414D3C97D5B72EE8193E182809AC32643978BBACC833D5C45F4C9FBAA277EF07DD373477D9E54C1EB41B69B1B29E3E6EEA5ABE083B42967002C593149F78EF5E669E3A4CEE87A91D42BA977BAE4923A91B673BAB6BCB61DDAB64EDBBB741BE83AA44BE67D46524A62B92FD1E50601D7B11227EAE3B1509F08CCB6239349906D17DF55A78E6A3107C70D1D09CD447CFBA991CDD8123A0FB61149EE6E11A2B847DC35B974474956AF75F2FCE1CA6F1EADF9EC0DAF3FF8A9DCBC7C80CC091971ABE9142A0C230AAA6E02D643E8944D652C0566C0AD3370EE461982FDF39495417CFBA19D6A2F28DB22421E222399D3253B56592830AE64F2D6B3D5E4F9D7F36AD591DC3F0F421544AB2031282A221460DDFAECA983B476526BB46B93B675DACE683748BB71DACEA5ED91AEFC9BAE43DA0EE93648DB95DABAEBDCBBCEC5129212A4DE49D9D5CC21E3E648714BA772F0431C1507DCA3BA10DD632D684062235E3F1AEC4D0F6A7EECA47A3C0C7A7057C2FECA64D5276FDDDD9289AD7BDA65EFED72437BB0E4F060E137FB517589B3A3DB882866DB807936CBEE0621A2F796B62C5E58829C842394891BF3199C8AF0D0ABFF0240C422C2ECDD0F37E79AA813F7A19D93CB51A34A851804079239473D9C1C29176695BEB8DF311BC77A526B8C4A4CE66CB2A736992D3BEB96C9BB55F27665B42BA36D9DD5DA65B53459AC4C164B2FAF2B63D51A9B8D4BDB195D0F2921A977B18D7BD7BB959C61A48C9999E112AC283C70063FD4BDA2534AE52E525A35A5008945FFAA3658FDA4D89BB7523EA36AF567627CE9350F370F4C0E9649966E206EC1B2E7AEA76B3BBA4D4BDB7776C076F52A27C72B541AD4C105318528E6D120A799A4800B86D189CE705D29F5BAD0D5529509C69D53305D2BFFD7C2BE10904E27489AEC347A2A28B5E37456E46213856C05A0EC8E4A91955D16DEB45737D32634F3CE6CDD1B775B4B479B7C0F8445A25D1B6D6BB42B67B570991F99CE8FB2CCE759E6CBCCD1CABC5D65DAB5D3F64E4AE22999981D9F7012C3F0849BDD6BC9044A8BFC5ED310861A67F85A0730B41497EE1109A506323488F3A8E6871FB3F4D4B6DAEE95106FBE2CF1EA81C9C13AB11607413499A64DB26ED3799B36DE927DCE567D534EC405E2D119AA7E1F8E0EB99AB8E34EE3D922E68AF83C4C6BCD9B917A382C05F3E1A434435F6F8C87975075FA8580F4329186E6C444778252DBD099A815DA3C74AECD09E5AC0651856E00E554A3BC72D0A5D78E5209EBE45D0141BAA5F96A65B25898CC0F4C0F0EB3CC1799C532FB7295BDED90B67752E79A1296B2628626B3E3AADA6D906294C144A90F713F06C4064B7BA9B4AD2B55B8C7D21D90009E8E8FBC290822C603D885C72D3DBD1D6CF75A88375F9170ED5696FD559235EE88BB75D953DF5B977B4F6CAC45E4809D7A9F69B5F24019DC9B15E04BC1AAEED9C8AE649BA01AE92D229272C58E98CDDD262BAAB9B20EC672540EBADE6D8C59FF06CAFA0BD721A7A6429AE94866414411082AF4C9E8AD58A44255646A32580F4692B6774E4F026726D13E7EB35FEC77B66A33DDDA65B5325607590E0EB21C1C655D2C8CC5DA7CD9235DEF9EB2939294BECF501DA8BB9B671F0A3F1F8AB9A1DA87A14B2960D8E7DB2DFE7980BC2E3D7377450CECB88745890E774E9B9D7BC4D35BF6423E7745AB6B9F235EBDD573679E6D91454CB2E3E6C97B4F7496E8A5A3D11B6C570B821878C4D063AD8CA0C77F5E295A5D316B481ED9584DF2D6BBBC4D2492C5B0714BB551E6C1381DE0B082D3B7DF004840711A8C6879906A43CD615612B90C1278D51BAB3ED325B7944BC4B8A0F76DC7FA2DA7EBF8772EB70707BD2CE699F961667E9898B74EDB8B7526DAB9B865715C868E2EAEE2A8E396255BCE18EE869218CE082224A45C6D01AA2C07507A5BC34A94EFB896B9BC69F9B40FC3FE42657BD9F7DE92F3B30F86FCC88B525DBDECE1E53B9DDF5D752C5C283CE092487498B7445D300B7326DA9151DC2262E577E830A144949CB550A696A3D9E2356E35BDD720914DDE71F7095123B1B989FB8AB486F9A4983E96F10D39A49248A2E93371DEBA65F35239B853072991909D5567AC3AA3EDB3F5E6A591EE50052148A5CF9CAD773F7EC76EFCC4A5CDCD0DDA6EDCDB0E9287B2F81E5C4D14F7223A1258E76EC93D25488E77A5F2F7E10CB9261443C49060781AAA5AB3E3F5270F6038859EA0004199F061AA188A0963B3C9E396BEE25CB047AE136EBF68FAF2EDE4B7D689B967124A224A22D052690BDAA2D61149642B1DD03044ADA8DE1B76F5AE989719A8AA924C518F083592948A4862C646126D8EA58139BE417DB795AE336923B63F7D4384F41E11A23BFAFA3CAF7A2305A883943CB14ECEA2CBACBA6CEBCEE832A93F6EA5B81BABAC41A56612E21F7E5373F1576FE76B3F77232F24088EAB8BAB89AA8993DDE9DD6D83A7DEA533ACF31201050C48A009F72132A400E2B98050BE3F14C0C70DCB61FAE7A6B85899B7E7E13D52A2CA8CF37D7AFADC283D7E23C49B9F225EBE8BBEB651E654246A0C9584908A08A0C32D95E0938896597F01DEDF7076C00B750519A665AEB8448C06F786A846941A31C5482C89B4591949A21A5F13965AAD2774476F2C0C45221011D145E7C9AC74EC7A837572965D66B9C9B6EA8C4D72EB72515B297BCA0E6D4E56299AB2C5FBB6AAED1F78C7F89D777E69B57AFEAEED230C4D3FD8985B6BD625A775A543B53CDD13D00DD494502B91619E4AAE28736B1C23BB61525E5369B960BD11624273C92D2225FF6B03952261C385'
$sData  &= '457AFAC92ABFFB668CB77F2DD4970EA25C77E1801CCA802C7A516F6E8693C83951ABA1550142BC50940FBBC1615864C53DA21287BB48448C9A484DEF0D8D2CCAFFA9A216C16B1656B3F679DD6F0000200049444154DC44C6756B819B9E7B7413DF58879443F8D391346777F4BC284D76D898B3494EDB9BAD3B63D3BB6DB25B6F586F6EC9DCCC4B7FF7B0CDA9B40A840B27AABDEF7B7AFCCC7FF5CBAB5FBA7C646D2F588F75497CE3AA851A8C04DE95A71440C8099102820DEF712DD46524DC13D90CB544D102504F8D56CBFC2B8AD29B822A71545459ECB87FD53DF2744CDFD4D51A5F08F5E5C3A8D75D9893180CD50C14290913C32D5105A38EA56691388C0DFC0D12DB9544046A5486A618110F8A588D5223A28C632A79270F8E7EB4445B8AACBB8B349315B95F68F237E4102F2EB7BD89D4AABEB7EE4D635492397D36BA6474B980D165B736BBF57938645FAA733DDA98354193AD928EA2C4A7F7E283FFF15B46F33FFD81E507B2D0B94A3FCC4B122E858E9C441EA2422CE1299125E1DAE1740375759052A1936CD47531D839E52C89A7C2E7E6D099E2A2C4AA9CF8D45E4F74DDE42D9ABFBEAAF5CCC7A47AE130CA758745B10C89520D39C8DC8A54908E5AAD0CDB06003C1DDFA5E098AA2226031844CCEAE33544865B7C94A829337E0F65AD259748170162C4F21EAD9FCBB5BC1453C7E71B5FC140D1D3DBB1A903B3BB6DF98C79E95FF51936FDF19D5BCC7A73CBEEF4E6D619F48E2D7BD2AA37DB64E7F6A2B783758E7FE062FDD4773E563FE29D5B39F5EA89DE8DDE8CCE8CCE8DD613EBBE63D577AC7D45D2394917982C4056085DC92B0E8CA09A94264337345193286A454D59504254242AF48A787AD2D257EF353CF749892FDD08FA8A9BACCA34D77518ED16FAEBB36229154F801661506E5353E6F3B92F12DA2C92A98106A5C1ADC688B8C6D219F0887B83511330C4226EB114AA94641F44A945196B4DE47CEEF24CAAF046D9EB0AA2BB33D99E8E6476E5A0B7DD71D428A518ECB31710CC2DE5326228A78A210FCD43C1B8B3F6746E1A75BE76833E9A53FFC8574EDEB7E97CF1F72E6F3E93548EC7DA099784E616AC4568D150944DF04257C7893A6BE1EE320357CC8CCEA1DF14FF50B9718622AAC4585E2D833AEFCC9B679EDEF26FFF40179FBF2CF153263A876068568215F95C46BE91A02B2A12A24A9F6DC81B83BC3EAEFCB5C668801A9152859B28A2E5DE2B3EE494EC33CC9530CC578E6BAA30487431254A51B751B6A5D333B666AE5F3C0EA902950AF5D1C6ECD2ED4D2A1D9F616A64908EF3863969C825C9A0CF589FE170E369D99B6533E6EB9C6E2D7A53F1EDFFE499E63DEFDA0BA7D898D179A2F344B2AED0D1C0DF2E9055874E441924DDBBCB55D0A189568E326CBAE25C34555C8B294BC3509065C5537C3AF60F7ED596FDB15F49E1F267899FB52073C48D98072A1AF8C78D328EB5E2909063D30343C1270A1A319D604C102F80D8F08406B3866C0DD91B924F48D4F800023E8CB431A226548E418E28117565307ABD21A9AB95FACBA3BB47075E3BE83AC076A6A16EA2E8BC7842D48AA6B1CEEEDD2764C8736590B4BFB2EEDC449BB6773B5C656B62CFFD5BD585FFF0EDE3E73E7DEBE8CAED9EC1000198C4923FBC0C701085C169821C57EA4A16C3ABA11A9663FB9096C851455124975A80A067D576DE3DCBDF7CA5D7F8891C7FCD2B9917853498E1DC8BA92F59447441A5091D8A4E772BCE98E3EA7E28F0DC9B7BB9C3196888884B8D7B2CB405A578F440940E1D647B190A972E438891EC8AE416D5DB12B926B55CF3B1BDB1B9580A1C11C1074E31337EF1C5D5C1236747CDFD27C26C5ABB7643CE289182991710DC1D194C10076D4E3BA372C398E5C6ECCE026290F8350FD5CF7DE75B9B97FFFB0FADFF5F8B52A4219E283DA1045638962127785402E5BFD48AC42F36A2C1C9A82581865C3E67A2B8C4B1A5C9379C4D7FD095A77EB9D55F48410E103392148EAFA4236B64938CA00B54D350E8DD63A64129E91700E134A5176611A71E9E11F348F2114EA6C01D51D654DA22521840BDD45065C2B78FF80D09F1A6C00141BB6AEC9643FF064006FD6FB899BBA908958A1EAC72F7F73EBEBCF9CC83CDF65BCE8433DB238D22563CB83DDDC69C5C80611850D199DBE1DABA9D46EBDEB0C5C68847C94651EB7FFF99C9EFFDC8B5FED59FBFDABF489048F2880FFA5D726993E4A15928A9F8A4341C578143E776A0B3600590EC45E6BA45726EDE7BCA9F7BA0F1DFFB770FC22FDC225E2FDE2DAD29565EC32D92CC08B26224C530E1D83DA39ED9407D5EE8C8BDC1EFC9DAFADEAB519318913D52F459260CEA31CA9CC0AA80218074387322D724B73703A34E7AB13EE714143460BDBC91B2FCB85551F85C0515158B0277D7DEFEF8C7D7D7DE72BEBAF6ECD978FEBEA9ECED8CB4AED475DDD3B5D96D9348A954EE86C17C63697B24B5006D6FB654B13B4789F327ABDD3FF5DCE47D2FDD99DFBABEF683E1AC4122481C6E1437F4AE6222E89047066B76384EAE5EA8EBB82013D721994E1E1A73FEF7ECDAB7FFE2525EFE74173E4714C3A52E79C10AD0AD2BCA828AD29B3A4EDC42315B332CBECBE45E74608A4B5D009186EC2392D7654361281D511381049250590D7300C5E400F42ACA6DD266A5796C24B5E4D9086255104BD261E3359F3FDDFEFB7E48C97EEEE27678E0C953E19DB35A66B50AAF1DA4E5A5BB7EF34ACBC1C7EFD86B9FB86D9F7B6DE5D755B0AD8AF12CCAB85642946258C0111FEEE736AD35562A211B5EA8100D8ADEBF137770EEFECAD5EEBA41C6250FDD021B0CA55E3AB7521485A0E8B06B0BAF04B215ED5FB24920B3D50476FEA30BE98F74CEFD3F79B7FA279DEA'
$sData  &= 'AA14BCA64303727035B0A4D6D550F997F8B87787332A9011CE04678C33026A6084D1604CC94CE96C4C67D560634D8CC29A4A56A8F4A81C0D77527344AE42B884B24FBFD9482F2629968962C26AF51C82D8266C8C536F1C508927F0D5E1DAE69BE42B1118571241D29D8DCF0F7A39E85516D736DE5DBB96AFFDDC8DFCFCC991D48F6C71E6F16DBD70FF84F3B3C8F638D08C55A367D7AE33DB9A46752BF6908DB81D2CA1A974F60D6F6EDEFF89EBE9DA3F7E79F359D49AE12E709FDFA950BAA798A16A25DF0B4503BBA2AAC84075294F6264F6074FFB579D0EF69EBFB91F7F7A558CCE0D5A7C58244BC3A86BC138ACCAA9A86180A53098B4DE48510D3EB441DC4ABE30A6246FE8ACA6774548D4D2526B47D415E26DE983A1200704BD0472804862D3279298A396C50DF3A4E3649683ADE8613687738B3750D65A1366EDFECA56ABDEE738D45141241D763EEF9D39222B443688A6E4DEDD6A49B75ABFF2CBB7F347A6C127F78DE4D4F9317BF73772FE54EDE74EF5B27772E27B4D909806D9DCF5CEE132716ABB3AFFAD6F6BDEF7C197375796E686488D0CFD29191418A243BBA454B83254D62A2552CC6ACC27A84C1E9FF99967A7F6FE975B6EBEB8916B88D5C3E7014964AB315634715572D030E6D5638FF1311D3101A98BB21ADA2225521A3A9FB0C935BD292A893A242A6989B244BCBDF773C5AF12ABCBE02D88D177A54B1DA291D5704F6CAD4B09D30A3487C699B53169DF00C88F9E85BFF8DA6ADEDA6AD9F9813B84A0D451E892AF705960B22C0D406F51297A5A8AE45D66DACB477E7079EEAF44B74F9C0C7EF26CCDEE57CCFDA9274FE9D3A7A73A9BD6D49E9DF5C66CB14EFAECFDF199AF7D74F4E17F78A9FD38EAC74D41231FBBE007397CECDB121D403A2EC07C4690192ABC772B7F7D6576E1638BF08F1645AE8E8BAB0B235985DB11E3B0288B36F0D770EF2C5C236E4D3928220D4E5DE4AD8D401ACC1B7A9BB0CE0DDD0046A58991B4445923D20EB9668EE8A7D1700DAC43D4E85322B786D64634A3356307E8C4D854C6D62D63B629278B773FFBC5260756871B5FDC5DD9CD3E7B1268A64D50C9B4640E715F11B5250E7D27E47826518AA7208A494CD9D2AD9E74ABF53BAFCEF3FEC557BBB4B515EB77DDA70F3E77BEBA30AAA46E3BA38AD6FC89E726EFFFC88DEE956B4B3B40062524A224E9081207E0B9B7FBCAEC3696C8601B159E99E5479F18E5F75D5EF8D54F77E1A617795AEA986490BC631C17C344AF48641F8A33A3C85A1FC0C06BDC47A5CEA0C17CC2264F68734DE711914425895A5B2A59A2DA623E43E5261A3E8ACA01621D84D204B5A5A1A1B4637A3376EA0244CAC6F60D230778F08E614BD8FE1C5F78CB9ADFFDE72C273B73BA91D36FDE0B6F3D39D5C9A2F5E5075FDC7CF2A893DB88AC50DA616ED121F4832A3B7E4D839728972A15364E3B4A76F27347D67EF07A7EF9CA61BE737A2A9313236D82A03B639D8D2BE97EE55ABA924A21540A0DF17264CAE5F85EBC55397CCE08F329C22E51AAFBC7BEF71D7BF95B37AD9DF8C8223CFF6B29DC04AF7094EC91DE61146F1243E9A514695DDC08EED590BC6785967C3A24EE66C8175BB479CA324DD85885638CA4A5890B9A302788E1DEA0728DBAFA456081582248C6E849AB5C00AC8C4E8D9118391A01E3C43E74EE3C79B5CCC7C75721ADBE0890F7FE5970763DFB89E7EE8FCFECCEC26ECAAC7EE9A5EEB3B7D6DC44A5DC7241B443A4074D880E60481EEC1F43A5CBB103C16ACF9388EFAC45D2D595CF3F79C7EE0072FF76986D8DB439D1C8E4D5837CE595233F4275684D8B50F455289337AF861A608A738220A351F0D1379CB4F79C0DF6F6D71736FFC5AEFAD461B95B752842D49D2AEC53850EF7CFDF3F565C70A9701917407C8C0D8ACA0675956D429BA72CF28C4DAE30844657346145A34704719C88CA8BC4F83CEA2BC433EA3D1E12FD2A97C34B5566138DD01BD217EADA3A005B18A7E6C6B887781D669721BB7D612F2B044398DF58D8EDEB87F95A36B7E9489BD36369864E2D9827B227B27764EF48DE6174B874E598ABB4880CCD423A54BA9584EB01E954443D0857573EFFC9CFF497FEC6F39B4BFB2BEBCE4EE4FCD73D523FB7A53219AAE1A2F591C9B08327180DD96724DB457C86D2BC79E20F3C58FB33876B8B373BE637B2B63835D96BDA1C115644E906BA2BCF4C244B49DEE633CCB7C86C0DBF6382F9843ECF58E56D8ED236EBD4905C89D2310A2DA3B02248C498A0F2294278016555F2552EB39BB429493C56892E1ADA1BBA367C66CC96C0DD728068AB877408673F6304376E9DF862CAFA41C72D741B3FB13B62F7ADE7AA77CE9A105FBCD55F7FE1467EC58575396BCCA6D094F7B825843CC83DBB972965302728E212ACCE76220BE3A46288786762578EAC3F586679EC6438F1E8AE9E7BF9D0AEBE74D7E68341A0024299644A85C998CC0E416604194D95F1D79FB0F74E2C5F5CAEB3BDB0892F5ECDE110F78ACE1538A2D1F9BD99B7DC3B8C50213425D27C8631C6BCC17D4CF631D967ACF2962CFAADB8CA23379C515833A9564CE38228821308F2CB54F153652DBC47AC07E9CB665D276263A4E22B450F0DD933B65A185D378E2670F196D1ADE1DCC78D3857A6C939FB237C6184FC37F701AC509F7FE86AFAD4EDA3741094FAE1BD786E2256935D493EDC92C28D2486A991356121811E776E5BD00E0D1D225D0EBE4A2AB7820FFD9C421CA935561FBA916EFF834FAE6FB71B6BBEF94DF1BD4DF4C9304B2809D57C46CE33FA7C1AF19308138CFA4D63BB78BEB2276EAF3CA5845DE97541B69A8DD564124D6811A94A72F6A119E80DEE33B29D20F909B2CFC836C37C3244DF36CBB4ADF37EBB5AA689F7A65E'
$sData  &= '4947135A1A6D11EAA117F52B04BD347437126E09CF89E446B736341AA6095308AF9711F33443DC37EE6EC153578AB7F7F4A78C70A4BC74D690BF7CAC58BEE861A145E5FF6BEE4B6225BDAEF3BE73EEFDA79A5EBDB19BDDAF0775484AA42CC9B16CD99A0565A38D5701E285914D8020011C508915494660C740804CB29C58CE36401646B2C9C2081220486027A648515464DA1A4C8914A756CFFDFAF51BAAEA9FEE704E16F77F4F326C4924454A3C40E1ADAA1EEAFFEA9E7BEE77BEF3DDA3BD95DC7AF15E78D107C1952D7B76B3A0358832745057C46178535452578C0398530B943424552D02889D129CB37CC04A8E707296000408871ECD3377E3C19FBCD8AD2E4DE8CAC777CDBB10B502B44AB4B68EE17513D019584B00A5814C7E61127F76D989EDBC4A13B4BB1FD4C14B092F8C9C9BE10C928A01513BAC823144C7109DA5F48411228D1031819709EA30330B3FCB6A3F82138E664853393B102C4405AACFC0F08B00A57E8E9C74393920F403A3CB82DE02F9B1A0BF2EC809C80E040D018F5C131CCC80ED6F088A7B8CB6103CFAD8F738F7BF3A1F6202981741B1F88B3BF16B07ABD05D58B73B97B7CD3904B1C3971B008980902070808720F0601232F4CC3150CFC688B3B480EA82E4B425CD20925ED1DD6EB1FAB3DB61F5B56B1D3EB14B1F795B161E4DBF5C9922C43944E6A0612F8952BEBD948B5BACBB776A3844E5C3802E4630BC58186AD2E9FC646588856AAACCD26A98206284A8E92532828B098CA59F152B3FA23E7200024AEE50B003234F348D7C19442F822889324402A0016A25B5070691446D04D32870AF08CCB6602E401B80DD7B82AE00CE3C93F68EE548E08ABFFCF8FF0A205FFC3CF0F1CF786898FB5EED95757EE8F2963D6B88E54F9E6BBF0D63860AEBA4DCE5B4428A98249F832266A0400612848D1A200B3292A8DB62196036601655182F6AA3908D2E163B05663B56CF7E77CF9B4EC8A9600C43150839806CC434FEC4A6BCBBEE657AD84346A4E6BAA3C39B3DAF0074286D3DE8DC5309ADC4800E74082A08C610FDDEBEE1648C264EB34518172B3F421FC959EE65645718DB16860C082D2CFD310CBD80CC24B992C081D443E121C6413A01C788260F186702FFBC408D60671BA84570E658503AA0B8061CDC172C0BE0E17F0CFCBBFFF5230001808F7D4AA0C8BB4E6667C7B4B9BB6E1EBCB899AD3DF552FFC251A347604A6010529D6D5820A4400998A8A9CBA63825034FBA6EAA64BAB81B3332C9603CC9A54561A2A8CD094516353B3BA252EA30395EC9C41912496D4F0B857D642CDB0F5572E54E0D888232117AA9C1FD038F252ABB80A1782AA04BBBD5C941AF4A800CBDEE74FA2ED1C471BEF4E372E54AF4917AC35DAC6C83916D612983A123E4E671187A05863DD8F410F45078A87856F68812619A90CADB4C811B0A592A362F2A9C08B6EF019553C41A18BD900EABEFFAE45FFBE8FF7A401EFF5DC5473FED43885B889AFD8D75F3F6DD0DBB494ACD575EE9AF81295514D024EF5416981C3055626939A6B1E5A45063001998AC329169C34E641E25511978103971489D045B92962524BBB846E5D171CC5D44E5411A415242CB5F98EB652B3A3FE892D09F62D4EFACE8B02EB2FDE1D74BC3B10F838B59319C372A881443DB7500238C8AA59F964B5FA28BEC889CAFB21A23D3C15201A60394F6FFC0D235903AD8AC83A287AA07D4931A0F4154AE6372CF2904E640106E0BD6AF08280A366E27A7A125291E7E0A30BD62F7B33F701AFD07CFA9B35DC1843BDFBE1F5FFEF36BEECF2E6CD8B31F7C307FF7975FCE9E7BFA866F605182C8A53C1A04D104B01B4A4C006A24F93FD2D02E85A82527191F90932DCD68002D5DC822D070DFA3BBD1683726E4B319953FF700CDDA1B81C96B7928667F7B44B2C9BA75D0A556B285B2F31A82E106968038487112D5929FCA711230F9A980CD4B4E4D288BC697E5B22FD10A5A633A37B20D0A0E89D3C22D94E67FC2D01DA8A48A51C84142006B2098408A205A07442FE8C782B205C25DC1DA2541DE0BF225603D70940B7EF67F0BB21A18317E58FC60B7DFC77F07F8C8AFBB18313F6AA27B7883DFB9BB69CF8E72D2AF5FF3DF6D05DD203252B0C453AD910D3A8C1E9BC12C80419C9D2A2301436D38AF960D086650FA11544D88C84CD4626AB464A83933A2CC44A1E346AC08AA47D679BE6131DEEBA041A1B9A8E9BCF6D790ED3920824048462AE67B2D563D495305220A78CD79E5C7E5CA8F460B37E2DAA325EE5D6597A8AC071323A39730C9FE18B9B90B680FC33DD8F488D101B107100C59AF1222A48BA80B410E85DE0B988C04D31C88AD62EB00D81F03EF785271AF541C4D80ED7FF63A0101800F7C3A005A2E5ACD6656E76FDFB6EFDC9CDAC9DE22EEBD742FEEA7BD64A04B4886FA8979F0AC32E0C8035D9E8160C1B00A30DA70064C63183088B204080C44331B659C11B2DCC0E6A4B45D226B1AD1DA81DEB76BA7BD820F3A1515220E42FBB5D4778C3D8ECC8AD3AB764E5295E6A7C008597829A8F6A36AE5AA6AD117547B6EC15D5765B59646C06450DA6731B34F20B7FB507430D4C39816511318643C9309108A2A4D4483086305680565AF98CCD2ECDF95ABC9E771FD96E0B005B2A878E493F851F1C30179FF6704ACA2A2B3A35AFA07D7E9D10B1BE6CCDAC8544FBDD03DE7041E4431F15610F030B542CA49C121066CD32A3064871E85A52EAC43741D199F6CF6160A421F4710140CB29660728027063C31C219C06FDBB659ED89828282172C1B91830EFDB1B50B49800C533B482284D4F9CB209AC34B414D28CB95AF46C77D65569EBB88BEA9F2464B0E60228CB33FC73CFF22AC3902A807A183410F55070D3DD8780279'
$sData  &= '121328B6411B2F50AB208E28BD6056097A081E7E3EF9C8D352D0DC4832A0F7FE1A5E4DFC70409EFA3CF0B14F7750E5BAD30231CAEE8C1FBEB29D5D304CFD37AFF5B724A93F06393814A4048E94686E66309B81AE18DC67284394027DDC82E50C84749AF65220481993E0DB4090E504CBAAD82888DFB6C1A655E626403326EABDCADE718C5D50B7CC6C9DA6C9C8429141514029876806D10C4E72AE7D395AF4A3F16157D2714F8D52DFA4951161798579F138D6F3FF07C335C02D483B64DC42A9834A072247448ED506E34390B6158D59A28D32126C18810F82CB2F01C76701BE2758FB166055F04BFF10AF367EB463FC13BFABF8F03F75AA323B5C45D9A9B07E66CABB9737ED997B4BB977ED201C82A02977D3E9143B8819C698A4F8D6010CCD53674E33B4B2091A1C75443278A906F5BD55D58C099C29D99C954B43B43361EEBCA00B50178145A7D0205407B8A5B5DD505699817A37A77489979C9B90574B578D8EBB82973DD5426D5B648D66AC28ED2D6C544F60963F0FE216A016A43D0CB5007AA8F6007B22F60413D96BD4AE8F1286FEBF3511EB2AE80558BFA5D00AA855F0371F17E4A278C763782DF1EA2CFC3FF45907D5D005992F5BA92FADD1E59D993DB7333393ABFBE1CEFD3A7689D9263D61B89338810C0003A66CD8D07340731072747106D53918165E46102D903CB958058614C6406D4EA059413CAF8828DDD845C7AD6AED92954C23148EC8B49A56A01D36F40C0203AF3975C18E56AE1A1F778559F4A60ED43579D668CE1ED3EC25EC8C9FC024BB06E60E442D485B583449B6233DC03D310722F2122868D78B84987863B2011B1074044C6F02952878099CB916B17900ECFC065E6BBC3A40BEF479E0839F6A419A1FD44ACB4EBA47B6CD3BB7C67C665E71F1C29D70BBF61A4E156C34E4B1938774CADE520168010C69A58D9B501D216805E613D0AC2619A9B50A6309E6FC8CB9CC885892C3C05123DA3A2889A271C09123513B54578081A88517C3ADCFAA95CBA7876D69161DAD029ADAD8460B7B889DD1333833FE5394F61E128BDD81D0C2680D18074D0429C37A32E45438A4816D3F0CF5D88075124401F2ABC03A044E80CB5F133CB145F8D0DF57BC8E78F5975C7CF43181A2516074F348DAB1D1ECD2DC3CF8C08CCF4F4BA6676FB8DB6952FC4456480C452A6D19594A5564871ABF029345EDD7E1640B06C5F7CA6262A81A1135ACE089217B79CE6C888854215EE09D50E78018546B275AF76A2231C0445035F0D19A366455E3F3C951979B45631781568DCD8E74AD7C0597675FC246F922ACA941BA024C07A081D106E01ECA1DC838A2CC91D500E188CE291AEF6110C156B096C5C433DC05B683A0AE80773C2178790398F582FFF28778730179F2F780F7FDBA4F94098DF716B2DA1963BE3DA6F367C67CBECC39BC7CD71F7A513A9583821220C9252C917C40719AB69A38A33E9E4BD5164CCAFDB0832C9949611E1891BD3025AB48760DE94E4E81734A31022BA7DA470022261229A2127762AAD667E3E33633C78D39563E68A6A397F1C0F42FB03BF92646F6DED0446B40DCA496031AB0E9A0C601D613B167A3A92BDA3AE1C605654490114C8DC0B082F6818D56A00570E92B8297D6937AEB137F17AF375EDB35304FFF7BC5FB1F6BC1A48DC3E8EE713C3E3FA3ADAD319DDFAA70765C7278F98E3F0C892E3183AD42962A9FD35495031821C80841D68C8BDBA7E714500243C110352CE087D660372B327E18BF2651184D3AAFA84AC79DAAF34A249A7C58A2A26C4336396A0BBB6A705CE5579BDD8DAFE2FCEC3B9897B76069990639B5067303A5168C166C7BA8F520D313C191D100B047EBC4347D88D0A4B2995A41C600DD553CB010480E3CF05CC0FFDD214C7BC12FFF2A7E9C78EDF7F23CFD05C1C77EED08C1F0510F7A612FDEBABC6E76CE4CE8C276A117B7A66674733F1C354E78380364101450CDD2EAA011442B7461038A1989561C75AC2965F1B0420C043C2635EFD940A142B4E8D29C0A69DA642C2561F762A5E8BD0A45650D4A791FCC76DDE66B99AFEF9F5DFBD3D585CD6F6056EE23E305886A10D530580D60A495614C07D80EE09EA08E52DBC0A1F392ADFA102C82962C986642390B67F7552F1C0AEA0930FF9AE0BF5D264416FCA35FC68F1BAFEFA2A427FF83E2173FB90053BE72A017EF855B5736797BBDA49DF54CCFAF5734396A7575DC8A7C9F4A3C89CD544B0499A08F1B208C95296317C79464FD4C4A19540841F9E218D995B166FB0D503B882122A6B4EC7293B257DD88BA5E5842847151CF842EDF9AE8EAFAD6FA3387D3C9751077205AC10CE9C95003E606C9DAB485313D90F550EA93431C79301C7C906CD585905190090B26064C14E7550BBBD98B6B09987E55F0479781D20BFEC5DFC21B11E675BFF3038F0500AB0114DCB81FEF6D4DB93C3BE1B3458C0FEC8C748389E2BD63E9447450020E7B888B6B8832075301424E414B8E5A129101D4408548947F7113B944E5DB4B95A88065D28C952C0339275F59EF9482178D4DA49978B339A3F6E5C9EC9B7B7975735059D630B4045303A606444D1A93D316865B50D6418C03C413C1B161071FC5D67D8896421C1B60C40AB17266DCEA78AA72CC47881BCF0AFEFBC3400FC1E73E8E372A5E3F204FFF3EF04B8FF5605A81293FEC202FEE853B55C1FAF019BBAB7DD8DCCEE3EEF684477717BA720E46450B8896E8E306925B543180648D8B151496544102BE38867D78A2F92BFB2A759F284C4BD0DC822C137203D8C1C8D204A122049D8ED55DAD26DFB9C9A35B030035986A185A816805A61AC42D080D182D28EF21EC01ED8928B061AF22D1AEFA108D4A1C678A71B2DB9E8F97321E1BB9636EA23FF775'
$sData  &= 'C117CF02F548F0850FE18D0CF363BDFBE9DF079EFE4287F77FE610AC5913A0DFB8196ED64E8F1E3D976F662AEBB9F3E72F4CE4DCC86811BCA2EBA41027F354FE6A3188982D0531366A4E0AB39569F6F31BC8EE1E46BA5FAB464D9D78CBA0DC12AA9C9053D2BC595594A46013FCF354BDF20AC637D4BE4B97ED0000062A494441545003434B10D7E907C32B306A1037206AC1D2808B1EA99FD113AB67639CA886E2B80F3183C4110BC6368011F3B543D56994FDEA9AC40FFD51C41FBC4711ACE25F7F046F74BC31377D666185886F01EC40244F7C377C75BF96C5872FD9F7ED6CD1A3BAD76D5CB27E369FE0E8A0A0C5ED9AE5BEA8B49EAC86345A1C052842C44E49F6C129DBAE161CAD4420041541008964C431083426D1BA4485FA085687E77C76E79550ED690687E4D8EE40E880931775493B261DC838083B440A3012888C53A8647510CD20A1204195258D557907AE88E2FA2078EF9781F96FE3CD8C370690CF5D023E757501C673607642993C7B3FCA8DE370F433DB74F5E7778A0F5C2C69F7FAAD7E8BDBB8B15E52E8C9845A391C794254303178A3907CA7A2DC7582831EA24260514852A7B3040202436372CE8057A80F58B64E9E6FE67B31A71319D2000AFA019061E65DD3CC9F9A340B0F714CECC010D38B284571B90AAA2C6903263704A30CC86AC1D16DE0FE4CF0268779C33EE9CBBF077CF89F7810F6114D879C4C2FE46E1CEBD1B7F7E486635E5CDAB1E37941557492F946326D42318DBE58939857BD2FBA55A0D6A946621D3C5418A2C4AA64A0A88CA2B2295D652AD0DE435C872EC4F82D37BEAA861B98931445CBBF94AE605A004DEA89671D149E0C793659602F11A10921D780499E5C88263723462360ED96E04B1E688DE0EFFCCA9B8DC71B7C5BF4E72E0180E0D3D7AE42B901F11535D41D3B0A4FDE92D5D7EFE2C6A353F3EE8B537E70671427AE957CB1125976825E216A089D07731F61B334806986510422452E40681C6A07546380BC838A208A266F12459738280C8EFDE8D2DC86E9004DD256B543AA822382A3A0815C1B82D5802A4B608CF781710E4C6F0AFEE35C3089C07FFA39FC24E2CDB94FFD772E0A7EE3D61EA27460B34A66FDD12D7DE8BFB2A7FC2C62D8AECCCE9992E71B9338D9AE2897A0DCB9E4162150E424A7631C0A854441B78A58F4115B13865A82C4E4F817A38AA66B134E52550285A80328F5C28D3AC03A04762009645848498CEBC599205A9824841EDD02265130A905FF790D680DF05FDF839F54D837ED93FFCD39C1676F1CA5D3302F60F941647C0E86C3AAF176558B5C5B8AAB549B92315A335ACE586C456A352A7B47B046D847A0758265ABD275116352A68C2181104392CED6811AC5C9F9821A106A000DA04D220A75D8C86D12B6590AAC14AC13116A83661C901782EA9660EA05D952F00733A027C1FFF819FC24C3BEA99FFE6F7701C0E1B3B7AE82B1079B5D86E52BC8CC0A9DDF8F7D7870D5EAC55523B2EF4410353956215D3C3F9698572A7C428A5989C83200C2089E53F51563B8EE275761CC22512227670E5E01A7F44807311D541D720426E38C970034C167489B7871285883607E03B87E0C34EF12FCE14F168C371F905360CE014083DFBAF31C24DB87317BC8CD1E7CBC89CC3F84DA5D04DC59B461CB4499B0484EAA0C89C824A4260701250B4F0BC2B8206888E8A274D74379F53A4DBE038B058C3902F3210C2F06601A18EDA0D6411090A963B21D070D1CBBE0F210509501592B982C051B7BC06A5FF0D5877E2A60006FD005F7AF297EFB2E0619E71C8A8B88F141F878165DD846E3CF52EB77B80B73EBC3AC123F19473FAA58F2D2124F2BE2D1988318722B35477B9ADFD8E3EA5A6BB22358731F9617A72FE6C52971184D034B8E32DB1941C88273DEF6214C8C200F01B303C1B9DB80DF173C7941F0AF3E8A9F56D04FED3FFFE62D80D8427506E02244CF4164074166883241D431472939C491552993DD64F28E172517999BC0DC81B9065307CB0B185E25AB0C5A81D100A6018C43461D19EB8CA8CB9D0B7DE1429C90D88A02E6C71236AE01E535C1CB1B82BFF7B7F1D30CC25B217EEB2E403A826207A267A1BA812833884EA02811F5C4836A183B4E4E56A9953A4C6C194A6C2EA14B6CAEE940EC60C9B1B5CEFAE8B2D08BCF7DF0730AA3D248BED6C8D1E673A21F7C4A30FE976F8947F1D600E4FB81494288611053E600E6C3F8D960FC0224F73748722FA5139A64F84B1DC8041876C4EC5811B2E003C1855049C014B25E46E1D942966B8752BFFB09C1EE6FBE651EC15B0B90EF8F7F7E176067A1D626D33029A13C4AE368189A59C3E85C1A7176696E9E031307863A1382405D902A8658B04CCA205B64A5E74EBAF3DF95FBBB2F02EFFD076FA9AFFDFF01777E1C75904C11B00000000049454E44AE426082'

$Pic1 = GUICtrlCreatePic("", 0, 0, 32, 32)
$iPic = GUICtrlGetHandle($Pic1)
_GDIPlus_Startup()
Local $hImage = _GAPIPlus_ImageCreateFromBinary($sData)
Local $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
;GUICtrlSetImage($i_Pic,'')
_WinAPI_DeleteObject(_SendMessage($iPic, 0x0172, 0, $hBitmap))
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
_WinAPI_RedrawWindow($iPic)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

    EndSwitch
WEnd

Func _GAPIPlus_ImageCreateFromBinary(ByRef $Binary)
    Local $picdata, $nSize, $picstruct, $Pointer
    $picdata = Binary($Binary)
    $nSize = BinaryLen($picdata)
    $picstruct = DllStructCreate("byte[" & $nSize & "]")
    DllStructSetData($picstruct,1,$picdata)
    $Pointer = DllStructGetPtr($picstruct)
    ;---- Часть 2 ----
    Local $hData, $pData, $pStream, $pBitmap, $hBitmap
    $hData = _MemGlobalAlloc($nSize,2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($Pointer,$pData,$nSize)
    _MemGlobalUnlock($hData)
    $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
    $pStream = $pStream[3]
    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
    $pBitmap = $pBitmap[2]
    If @error Then SetError(3, 0, 0)
    ;_GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    _WinAPI_DeleteObject($pStream)
    _MemGlobalFree($hData)
    ;-----------------
    DllStructSetData($picstruct,1,0) ; отчищаем структуру.
    $picstruct = "" ; отчищаем структуру.
    Return $pBitmap
EndFunc
 


Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #11, Отправлен: Май 07, 2012, 23:29:30 »
Плохо смотрится... Должна быть без темного фона.

:)

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 462
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #12, Отправлен: Май 07, 2012, 23:32:49 »
Ganibal95
Продолжай  :) очень интересная функция должна получиться

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875

  • Автор темы
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #13, Отправлен: Май 07, 2012, 23:33:42 »
Yashied
по мне нормально :)

А как можно отчистить Pic без моргания когда обновляю картинки с помощью:
Код: AutoIt [Выделить]
_WinAPI_DeleteObject(_SendMessage($iPic, 0x0172, 0, $hBitmap))
 


Я вот так сделал, моргает меньше:
Код: AutoIt [Выделить]
GUICtrlSetState($ctrl,$GUI_DISABLE)
_WinAPI_DeleteObject(_SendMessage($iPic, 0x0172, 0, $hBitmap))
GUICtrlSetState($ctrl,$GUI_ENABLE)
 


Но все равно моргает :(

Оффлайн Ganibal95 [?]

  • GreenBytes
  • AutoIt Гуру
  • *****
  • Сообщений: 875

  • Автор темы
  • Репутация: 237
  • Пол: Мужской
  • GreenBytes
    • GreenBytes
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #14, Отправлен: Май 07, 2012, 23:35:25 »
inververs
Я делаю UDF GAPI Это одна из функций теперь :)

Русское сообщество AutoIt

Re: [Графика GDIPlus] Создание hImage из Bitmap
« Ответ #14 Отправлен: Май 07, 2012, 23:35:25 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
4605 Просмотров
Последний ответ Июнь 17, 2010, 15:28:27
от CreatoR
27 Ответов
8778 Просмотров
Последний ответ Май 10, 2012, 07:53:15
от Ganibal95
4 Ответов
2232 Просмотров
Последний ответ Май 10, 2012, 00:55:55
от madmasles
0 Ответов
745 Просмотров
Последний ответ Август 21, 2015, 20:18:24
от CreatoR
6 Ответов
2491 Просмотров
Последний ответ Декабрь 08, 2015, 13:12:33
от Yura
3 Ответов
3187 Просмотров
Последний ответ Декабрь 16, 2017, 16:10:23
от Ganibal95
9 Ответов
1563 Просмотров
Последний ответ Январь 22, 2017, 15:54:51
от inververs
8 Ответов
2738 Просмотров
Последний ответ Июль 28, 2017, 22:05:09
от musicstashall
3 Ответов
671 Просмотров
Последний ответ Сентябрь 26, 2017, 15:04:37
от InnI
1 Ответов
118 Просмотров
Последний ответ Июль 16, 2019, 08:24:09
от joiner