Jump to content

1 Screenshot

About This File

ImageSplitter split an image into pieces that can be used

• for collage art.

• for website optimisation (speed up the preview of images)

• for printing purposes (big poster)

• for create a puzzle.

Load an image by menu or by drag&drop (jpg, gif, png and bmp are supported)

Choose a format and select Columns and Rows count you want.

Once Split Image processing is finished a folder with all splitted image parts will be opened.

Parts of image are from left to right and from top to bottom.

executable :


What's New in Version 1.0.0.7

Released

  • DPI Resolution can be preserved as original or changed.
  • Multi files Split is now possible ( Only by Menu - Open - Multi files Split)

User Feedback

You may only provide a review once you have downloaded the file.


  • Similar Content

    • By UEZ
      I don't think I ever posted The Matrix here, so here's the upload:

       
      The Matrix v1.31.au3
      ;coded by UEZ build 2018-10-20 #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico") #AutoIt3Wrapper_UseX64=n #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe ;/rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #include "The Matrix Sound.au3" _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit Global Const $iW = @DesktopWidth / 2, $iH = @DesktopHeight / @DesktopWidth * $iW, $sTitle = "GDI / GDI+ The MATRIX v1.31" AutoItSetOption("GUIOnEventMode", 1) ProcessSetPriority (@AutoItPID, $PROCESS_HIGH) TheMatrix_v1() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func TheMatrix_v1() Local $bFullscreen = True, $iMsg = MsgBox(BitOR($MB_ICONQUESTION, $MB_TOPMOST, $MB_YESNO), "Question", "Enable fullscreen?", 5) If $iMsg = 7 Then $bFullscreen = False Local $binMusic = _Music() Local Const $iLen = BinaryLen($binMusic) Local $tMem = DllStructCreate("byte[" & $iLen & "]") DllStructSetData($tMem, 1, $binMusic) FSOUND_Init() Local Const $hMod = LoadSongEx($tMem, 0, $iLen) FMUSIC_MasterVolume($hMod, 50) FMUSIC_PlaySong($hMod) FMUSIC_SetLooping($hMod, 1) $binMusic = 0 $bExit = False If $bFullscreen Then Local Const $hFullScreen = WinGetHandle("[TITLE:Program Manager;CLASS:Progman]") Local Const $aFullScreen = WinGetPos($hFullScreen), $iPosMainScreen = Abs($aFullScreen[0]) $hGUI = GUICreate($sTitle, $aFullScreen[2], $aFullScreen[3], $aFullScreen[0], $aFullScreen[1], $WS_POPUP, $WS_EX_TOPMOST) Else $hGUI = GUICreate($sTitle, $iW, $iH, -1, -1) EndIf GUISetBkColor(0) GUISetState(@SW_SHOW, $hGUI) GUISetCursor(16, 1) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_BitmapCreateDIB($iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $hDC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hHBitmap2 = _WinAPI_BitmapCreateDIB($iW, $iH) Local Const $hDC_backbuffer2 = _WinAPI_CreateCompatibleDC($hDC) Local Const $hDC_obj2 = _WinAPI_SelectObject($hDC_backbuffer2, $hHBitmap2) Local Const $hCanvas2 = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer2) _GDIPlus_GraphicsSetSmoothingMode($hCanvas2, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas2, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hImage_Bg = _GDIPlus_BitmapCreateFromMemory(_BG_Image()) Local Const $hHBitmap3 = _WinAPI_BitmapCreateDIB($iW, $iH) Local Const $hDC_backbuffer3 = _WinAPI_CreateCompatibleDC($hDC) Local Const $hDC_obj3 = _WinAPI_SelectObject($hDC_backbuffer3, $hHBitmap3) Local Const $hCanvas3 = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer3) Local $tColorMatrix = _GDIPlus_ColorMatrixCreate() DllStructSetData($tColorMatrix, "m", 2, 2) DllStructSetData($tColorMatrix, "m", -1, 12) DllStructSetData($tColorMatrix, "m", 0.0175, 19) Local $hIA = _GDIPlus_ImageAttributesCreate() _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $tColorMatrix) Local $iPosY = $iH - _GDIPlus_ImageGetHeight($hImage_Bg) $iPosY = $iPosY < 0 ? 0 : $iPosY _GDIPlus_GraphicsDrawImageRectRect($hCanvas3, $hImage_Bg, 0, 0, $iW, $iH, 0, $iPosY, $iW, $iH, $hIA) Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0x0B000000), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0C0FFC0), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16) _GDIPlus_GraphicsClear($hCanvas) $iFPS = 0 Local Const $fFontSize = 8, $iW_Char = Int($fFontSize * 1.5), $iH_Char = Int($fFontSize * 1.5), $iMaxSpeed = 8, $iMinSpeed = 2, _ $iAmountChars = ($bFullscreen ? 75 : 100) Local $aTable[$iAmountChars][4], $aChars[56], $i, $sChar, $iChar = 0 For $i = 0 To UBound($aChars) - 1 $aChars[$i] = ChrW($i + 65382) Next $sChar = $aChars[0] Local Const $hFamily = _GDIPlus_FontFamilyCreate("Times New Roman") Local Const $hFont = _GDIPlus_FontCreate($hFamily, $fFontSize, 1) Local Const $hFont_Glow = _GDIPlus_FontCreate($hFamily, $iW_Char, 1) Local Const $tLayout2 = _GDIPlus_RectFCreate(0, 0, $iW_Char, $iH_Char) Local $tLayout3 = _GDIPlus_RectFCreate(0, 0, $iW_Char, $iH_Char) Local Const $hStringFormat = _GDIPlus_StringFormatCreate() Local Const $hBrush_Char = _GDIPlus_BrushCreateSolid(0xE8E0FFE0) , _ $hBrush_CharGlow = _GDIPlus_LineBrushCreateFromRectWithAngle($tLayout3, 0x4000FF00, 0xE0A0FFA0, 0, False, 1), _ $hBrush_CharGlow2 = _GDIPlus_BrushCreateSolid(0xF000FF00), _ $hBrush_Bg = _GDIPlus_HatchBrushCreate(9, 0xFF002800, 0xF0000000) _GDIPlus_LineBrushSetSigmaBlend($hBrush_CharGlow, 0.5, 1) _GDIPlus_LineBrushSetGammaCorrection($hBrush_CharGlow) _GDIPlus_StringFormatSetAlign($hStringFormat, 1) _GDIPlus_StringFormatSetLineAlign($hStringFormat, 1) For $i = 0 To UBound($aTable) - 1 $aTable[$i][0] = Random(0, $iW - $iW_Char) ;x $aTable[$i][1] = -1 * Random(3, 200) ;Y $aTable[$i][2] = Random($iMinSpeed, $iMaxSpeed) ;vy $aTable[$i][3] = $aTable[$i][1] - $iH_Char - 1 ;delta y counter Next Local $hGfx, $aChars_pre[UBound($aChars)][3] Local Const $hEffect = _GDIPlus_EffectCreateBlur(2) For $i = 0 To UBound($aChars_pre) - 1 $aChars_pre[$i][0] = _GDIPlus_BitmapCreateFromScan0($iW_Char, $iH_Char) $hGfx = _GDIPlus_ImageGetGraphicsContext($aChars_pre[$i][0]) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, 4) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsDrawStringEx($hGfx, $aChars[$i], $hFont_Glow, $tLayout2, $hStringFormat, $hBrush_CharGlow) _GDIPlus_GraphicsDispose($hGfx) $aChars_pre[$i][1] = _GDIPlus_BitmapCreateFromScan0($iW_Char, $iH_Char) $hGfx = _GDIPlus_ImageGetGraphicsContext($aChars_pre[$i][1]) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, 4) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsDrawStringEx($hGfx, $aChars[$i], $hFont, $tLayout2, $hStringFormat, $hBrush_Char) _GDIPlus_GraphicsDispose($hGfx) $aChars_pre[$i][2] = _GDIPlus_BitmapCreateFromScan0($iW_Char, $iH_Char) $hGfx = _GDIPlus_ImageGetGraphicsContext($aChars_pre[$i][2]) _GDIPlus_GraphicsSetSmoothingMode($hGfx, 4) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, 4) _GDIPlus_GraphicsSetTextRenderingHint($hGfx, 3) _GDIPlus_GraphicsDrawStringEx($hGfx, $aChars[$i], $hFont_Glow, $tLayout2, $hStringFormat, $hBrush_CharGlow2) _GDIPlus_BitmapApplyEffect($aChars_pre[$i][2], $hEffect) _GDIPlus_GraphicsDispose($hGfx) Next _GDIPlus_EffectDispose($hEffect) GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") AdlibRegister("CalcFPS", 1000) Local $c = 500, $bDisplay = -1 Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas2, "handle", $hBrush_Bg, "float", 0, "float", 0, "float", $iW, "float", $iH) DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, "float", $iW, "float", $iH) For $i = 0 To UBound($aTable) - 1 If $aTable[$i][1] - $aTable[$i][3] > $iH_Char Then DllCall($__g_hGDIPDll, "int", "GdipDrawImageRect", "handle", $hCanvas, "handle", $aChars_pre[$iChar][0], "float", $aTable[$i][0], "float", $aTable[$i][1], "float", $iW_Char, "float", $iH_Char) $aTable[$i][3] = $aTable[$i][1] EndIf $iChar = Random(0, UBound($aChars) - 1, 1) DllCall($__g_hGDIPDll, "int", "GdipDrawImageRect", "handle", $hCanvas2, "handle", $aChars_pre[$iChar][2], "float", $aTable[$i][0], "float", $aTable[$i][1], "float", $iW_Char, "float", $iH_Char) DllCall($__g_hGDIPDll, "int", "GdipDrawImageRect", "handle", $hCanvas2, "handle", $aChars_pre[$iChar][1], "float", $aTable[$i][0], "float", $aTable[$i][1], "float", $iW_Char, "float", $iH_Char) $aTable[$i][1] += $aTable[$i][2] If $aTable[$i][1] > $iH Then $aTable[$i][0] = Random(0, $iW - $iW_Char, 1) ;x $aTable[$i][1] = -1 ;Y $aTable[$i][2] = Random($iMinSpeed, $iMaxSpeed) ;vy $aTable[$i][3] = $aTable[$i][1] - $iH_Char - 1 ;delta y EndIf Next _GDIPlus_GraphicsDrawStringEx($hCanvas2, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) If Not Mod($c, 1000) Then $bDisplay *= -1 EndIf $c += 1 If $bDisplay = 1 Then _WinAPI_BitBlt($hDC_backbuffer, 0, 0, $iW, $iH, $hDC_backbuffer3, 0, 0, $SRCPAINT) _WinAPI_BitBlt($hDC_backbuffer2, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCPAINT) Switch $bFullscreen Case True _WinAPI_StretchBlt($hDC, $iPosMainScreen, 0, @DesktopWidth, @DesktopHeight, $hDC_backbuffer2, 0, 0, $iW, $iH, $SRCCOPY) Case Else _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer2, 0, 0, $SRCCOPY) EndSwitch $iFPS += 1 If $bExit Then ExitLoop DllCall($_MDKernel32Dll, "none", "Sleep", "uint", 5) Until False AdlibUnRegister("CalcFPS") ;release resources For $i = 0 To UBound($aChars_pre) - 1 _GDIPlus_ImageDispose($aChars_pre[$i][0]) _GDIPlus_ImageDispose($aChars_pre[$i][1]) _GDIPlus_ImageDispose($aChars_pre[$i][2]) Next _GDIPlus_ImageAttributesDispose($hIA) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_FontDispose($hFont) _GDIPlus_FontDispose($hFont_Glow) _GDIPlus_StringFormatDispose($hStringFormat) _GDIPlus_BrushCreateSolid($hBrush_Char) _GDIPlus_BrushCreateSolid($hBrush_CharGlow) _GDIPlus_BrushCreateSolid($hBrush_CharGlow2) _GDIPlus_BrushCreateSolid($hBrush_Bg) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_ImageDispose($hImage_Bg) _GDIPlus_GraphicsDispose($hCanvas3) _WinAPI_SelectObject($hDC_backbuffer3, $hDC_obj3) _WinAPI_DeleteDC($hDC_backbuffer3) _GDIPlus_GraphicsDispose($hCanvas2) _WinAPI_SelectObject($hDC_backbuffer2, $hDC_obj2) _WinAPI_DeleteDC($hDC_backbuffer2) _WinAPI_DeleteObject($hHBitmap2) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $hDC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) FMUSIC_StopSong($hMod) FSOUND_Close() MemoryDllClose($F_DLL) MemoryDllExit() DllClose($_MDKernel32Dll) EndFunc ;==>TheMatrix_v1 Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS Func _WinAPI_BitmapCreateDIB($iWidth, $iHeight) Local $tBMI = DllStructCreate($tagBITMAPINFO) $tBMI.biSize = DllStructGetSize($tBMI) $tBMI.biWidth = $iWidth $tBMI.biHeight = -$iHeight $tBMI.biPlanes = 1 $tBMI.biBitCount = 32 $tBMI.biCompression = $BI_RGB Local $aResult = DllCall("gdi32.dll", "ptr", "CreateDIBSection", "hwnd", 0, "struct*", $tBMI, "uint", 0, "ptr*", 0, "ptr", 0, "uint", 0) Return $aResult[0] EndFunc ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2018-02-02 Func _BG_Image($bSaveBinary = False, $sSavePath = @ScriptDir) Local $BG_Image $BG_Image &= 'iVBORw0KGgoAAAANSUhEUgAAAyAAAAH0CAMAAADynrlKAAAARVBMVEVHcEzdzLzCmnaee2J2XkxnQTG0nY5SQjZFJxgwIx43MSoUDw4lGxocGBcvKicgHRwqIiKCWkbWknfiuJP1z6uQUkGycFteeNywAAAAAXRSTlMAQObYZgAAen9JREFUeNrswQkNACAQAKD7+0c2hxsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwlq2d2uvsy8x47d5aoWArGALisg/4nIYH0/jfboD2swbp8hOEOj8ZZt8ev4/jhVhVWJV6tbtzP6/fj9+/nvXHX5DTk+NkeV9WqR3X5bu336krtpqy06/UpyJrH8TO9qu0alMBn27ccvaPfz3ZtZVZb9dnObcnx8zyudq16tBv3qgFhLFK3PMi677pa1bWchhw/sR+1LvfXDdytPW91WOrqfa+ewn1XFXc/fh3HT/Oo63pdrYiO2JYdWNb0IgcIQrbrOk9nHT/Oo9XCKsBwtw0l8iZpyo4MZHKX5HE6cvzxHo//j1XXpyLo6MYeCXq37DnjaRm2lYCsdm5Ijj+3F4/3+snjc/vB61GsKndZ3VYAf8wlMmzssZOEZDsVOf48j9f71fFlXb5f12PX5OL1amCNLkU2bBJGlxElVuaUZasrWAiuVDslOf4sj+tqrRWrvep6vLgbctXraoWbgAXZ1iDQbRmJFFvygj0yyKq2VJF1Xacjxx/j4gLcJDrramu+VkHaVSShDFtxSHRYnvCc09ObuhVwKVbV9VH1x7xN6ziuqva8q+0bkruDRF21chWLMAYsebRyh4140UqX5QQjCmQHk2RVtVat6vNOlOP4ci/W63W1AtKuBssi2XY9qgjUUE/MxtiwFcebujURSbYlDZJjcKm21LI6ct6Gcny3V2uvNesmWcQNeCVVYK0xipBEXkS3syJvsjQz7WlJwR4CEHKl6mq1ll/bacjxtR6vate1cjUWibdu' $BG_Image &= 'J0AVd4BoVKM7vIf8JiWalu0gsmcWO3HPf49KTjeOr/ZotV1VTBAFIADNYNSnIQGz9085YrvLtjTX8Eqi7kGOETjGYEbI4iTrNOT4Yo+LVVxmonAAAUckhaiPDIKt0YatwIvsyG+BIA0WbUUgB5KpsXag2q/j+FaPVyMAMuhSMEisCAnAqpUiOGZVo7sR+UNzTi+KpT7JYRkgi0QGRiAFvbOd25DjW70u2oClCIhQJAcwMEjWShVJgK0qsDX36mllygtsRUls8K2K0ALIAszrNOT4To+r0AV7QEGATyMGAL7P3MClqgI4lu3pmeyD4gl7n0UCAmtAH8gnvH4dxxd6tNnRZahLMpDBYtX4NOWdBSzVQgBakbKSaXtuawuyWGD0+bWnpAlZPg/Uj+90BR1etCAzIFlVDPDeWdgD/Pw4RqRAiBLNXYS9JVYiOBiG8zGjQAbi+fp1HF/nlR6jw9ACIAOs2vm3KVUoPEFwn0kCH4I0pUjyShDDY8QKDG/IEAR0mOcm5Pg6L+Lulu2ZSIMRl1qIvbVPQQhg7GORN+5xkwVgQHvMKXkkTjQgw0BkOcnnv9SR05Dj2zwq6B2GgwQKhzBQZC2fgizYc3diI3nXXfW87xUAEgQFiQYgKUOLZcnJICF0YZyGHF/mErZEnpA0BgncKLDeWn2wyDVruWv5nPYZNyAIIwowBJDAvwXZBkkAYr1+HccXeSUAGRgREGCAa4Io7nJ83PWsJ9b29tx5Pp/t+V7uBdANCVkJSSAZGQvm1GA1Ere+6ksdjuPB2yBgI0EwMDgGQECF2tq7EKW93cU11+lec/vr+qutmlTdvEEgWFgY8YCkAGMQGCwWCL5OQY4v0ng7seXpZIwgCwKA2FVof7N3RkuOqzoUnRhjaSsywfF0/v9TL5Iojnse7rNTxQI7yen0PPWqjQxwIikc7nciv6/5OFLDJDmy2QMWKEQkcmP3NY1aixhmF2OdY6zJNwUIGrpXm8pogniM1NLu' $BG_Image &= 'BhnreqzH4RZkg1pj8yOvq/ux+Lly69o0inIEUmqtZtzewKvuzTzEJkPmKcjke0g7sOuO1l7+rKmgvkIPppxNj9Vj4r01D47jyPnomjQ/zI5tO5flXNrb9tnyhVXEpWuYIdoaKmoRt22uN5l8EQSI+VFfrxgJlYqqCoEXIHl1C9K2bO92pYaFSZPj8PjYtuU8/57nYzF9miOWLyxsQmi1jVWOvlChithf+Gcy+aYR1g70FSEVgDYAZspHIzUWS4iz8fagOOxqgpg2i9nxt3Gei4fIkQ1mAJYd7Ypjrp+7lqJFkNJckDX5GhJsCl1r9X0dpZSq0NYjPCwsNkuP5RxsXnE4y/I4H25Hux4uTyhiJTyg9WX/MLCHLBVQVEmzSp98DVIV2BVqgtRair60suSc1/STPumd3pEfQxHLCiMtaduaGUb/79vijhyWIiRAwUtRUSCNUl87VEVSmkXI5Et4iOoTWveq+jJDdFdVK819dLU1DYyuh4swgsRy5XH+tRYhcppHW3/sa4qMqXSoqdefHVOaCTL5ElJRxCDoVRvw4oNzbnZ8UjI9nDOaMzS5fjZD+k+W5JgirFAWgcIssQsoZZ5vMvkaNuz1VVt/Garw8iP34nzIEXYsw44hSajhrd+8WF+aXp/1yMQSC+ZLQ2tVVYhMQybfwlYVWlCr1l1RALXyw+zw/Nh6gJzDEHPDe687ehuWdEWWFHMmjMziQKQAUC1TkMnXsAFFa0VsBQEgTDa/YWymyD8jrIsh4xZSDF16EZ/eyWbeLUIYDQGJInbzziJ98iWkilJq0wMeICzZ/QjCjz7AuhoyLPGBVRByhDQRNz7xzjkzVCGAZYg+UbWufyaTr2CFoPTD34DKlG3uw3ryacDNDdlCjn8NMYYddo+PvVYPQzIxZybXo7auu6LOmcLJ1+wlLIinvFAwZXI3eg1yGWGZJINRknfOcb8Ms6ISsSkRZiJSFTFJZFctsv2ZTL6ATaDi5yzoC/ClhHF6' $BG_Image &= 'tQtiLfBE2H4bYi//0nNlKBKVes5EJBr7qPBUzOWKk68RpKjuPsASQc5ef+QuSB9ieQHi9IQYNgwGbs5lkGWK5ExshgigVUR3xSxCJt8iCLRqbR0CohwBchwp+Pcp1jAl2m+GGldFUhiSicRAQ4F5SO/kWwRRrepThMxMh4+vrDc+XoVsIYh3T5BGd8F4eB+cvYVGXqh/0s9KjAwRkqKKBs0iZPItgtSie2uAkE8RHml1O9LmdgxDQpDrzODgXz+iQgm8UDdDWFSkVNVSeM6ETL6CVPtpP1GiRwmydkeWNPTwFoQCER4jQx52N3rC9Ba5Y4tOiLmSoohgVzDoz2Ryex6EhlXpqi5IjqdYpslnPMjauh6DXmm4G+M+FIke9KVZh2+hEqhWQAGZh1hPvoHHKoDp4YJkE+RIq7Vhh/VRhdjO2v8iYngRvd8uE+qP9v3+sDeTsAj0VaAKFpmCTL4hQawqeKq+APEEOVZ3o88Ujjrk7IY4j/6oKsSIa9jRm1fohrEca2YyQWpF1QbXWaVP7s8mJNhfqgoQZRfEzyY5jnTdD/K7AvknQkKOQdhx/W6fUGcSUYWaItjnTMjk/mzmh9aKhiBzbqTDm/FZwpGxHmvQDRhyPLw1xnLFCJkgZgtZiOCo6lyONfkCNhHYOnc0suTGcaTV9IgEGUXIaa3xsD4IJ/6l6xGi9An1IyKEIKVAtWqZRcjk/iRBQxUKBks2whBjsb6NFYseIXZtI0J6dlgfDDEuCbKM2XTx/CiKOmdCJrdnFcCrZq/RM0eEeDtijLW4JkbY8Zv/GyDWLD7GGEsY0jA7oDqLkMndeRADO1wQBluNfk2Qj7uR+hirMeJjpMNlyvAx/GhcI8QsSSnlNWcRCKAoCp1FyOT+ggjgkyAKoeyCHMc6KpC09BZyjAHW4LoV5Mqv8VXfGJLXlQjiggCqc0/I5O48hAFUrYCAJTvHeMTrd4uQUYY4W//jX66G2DtvvwdZy3+r3n1XiJCI' $BG_Image &= 'QqtdU5DJFzzE0h0VgCDmCcdjrHBkuexM9zYIAy6GXOWICPE+BFnXWPJOqkCB7rNKn9xeEDRKrUVHDTISxFkadrsqsoQg9jIKjj67PqqQ+DS+HGMsyhxFugpUn1OQybcIUgESohx6HGsUIUsaVfqw41cVsvTyY6gy9LjWINY8QVZhwAUpovMx1uT2JDQE1W56TZDgM6p0J8qPK12DhzlxUWQIMgLEVVtzhgAQVX+lP5PJrVlrJAigQuIBEhHicnQ3hiJn6yHJZaAVdvx9eA9ObyM+rPcEIXCBCAydz3knd2eFUytQvQY5cjfk0wMkeiekiHvgckT9EdMhQw+7jS+GII3uhmqBQqYgky/YLoWqgEJ6CZItQJzQY+THhXFIb+jhZgxCl/41b0MQIlGIQAGozASZ3JuHiKD1WgsEDLYS5McM8Qrd+J0fpsXjlyOP8OS6Zeq8bLx1oggxQ0hEBQ01I9cpyOT2gihQWi8goVGEuCGfbdQg2wiQ9/Uv/xFePNyJwb9J02uQdc2ZWKSvdleVNAWZ3H+IZQlSLEJEYoiVTZCoP0yRrTXjeiKWdftokfE2SwZjkeJg1CDHaoLAqQDKFGRyd0EsNiAo5gd+JYiHR/R/dtw++qTgFltuvV24FCD2frFmfiTzgwDTUQHoFGRydxKJ1QUCmB7c/RizhO/f0+jbeb4ffQXJw8NkYG9dl3MYcmFpWIBkIkYBKmqFzg0hk7uzCmgVkSosTNkYE4WuxsDrj5Ye7789Qewl0iMSJK6oR65u/B3TIDlThrgeWtGYgkxuDqEKiRSBUH/K24+vNjviuibIe+y6be3d+vVELOe8nh63XJ9hJQsQgguCUoAyBZncHDIzhAplg9ZsHGMO/cJ7Od+mx9sy5Pwbogw34vX3sQ3BYq3RS5CeIDBDpiCTu7OiEhXpR/50VhckxbjK1BgZ8j7DkbOxvU/jfZUkHDHOgcWIC3JYgKiguCCi0CnI5Oas4pTStKCVKGfym72s' $BG_Image &= 'jZTiIe/QJAw5r7REGRkyuCRIoycIC4FQoVpFAKx/JpNbsyIEEcpra0TEygplA2zk47A08ULCIySa50mX5e/78a8hp19jkNUPbQAJUKMCUdQpyOTmrEIkIiiZaCUwFKoABGpwd4SyR8l72SxDFvfCnOk8LhMi9mbpk4jW/e3SMEEYgKBRRAClP5PJrUlCRAIIDsoE1dBDFXolguSz2VArLsuFiJDl/Q47mg3bltJ6ZGf14LlumMqUgYpSYSgwFytOvkOQIuQr0d0LQBt7Q59P/wi1zjkf29b1MEKTbWsRsjU1qMEkxAwWZo7Hxqk74hHCQG29FLNEpyCTu7OJEJWYR1fn1dW4ok91mPNnczGsv9tlLR3HT/bCRRneGawKix3DHIkEyQwzo8C6AjIFmdybBwmRlAIBdH+99qfuz31/2tXuhr04uztybOnT48Nv6cjawEWpHjwVAuauiBmy5pgmdAqmIJP7sxKRNFS1QvfqPrQb2hWOXG4mSE4phRzBymo8rZlE9hIf4c0U4Xy0ELEihMMchTEFmdyeZHqsG+2q1v3aew5ElthL/9i68toEGQmyrbxfoyMIQyxyENtMKK9p22KMVVEjQVSx/ZlMbr8jpKTkVQZ0V8+KIYb1SBKNHNEnOLPvOvykz+c4sroN2pVoxFu1l11fqoKcrV5PiwnCUDdEUXgKMvkCQYqAVjRqDUHMjvCi9UYoomGNKvvjW+vHT86skRgeMerf2v21tfYOqgyibKwpK2vpQyydgky+AYIUEZRaVd0EJ/LDr16LuDwagnzeS0ytH5kjOuwWctmlDahqMwWAGUKZslUj5D9BQ0V5rnef3B4CCoAKxLMo3QdPNyaaWoYUggnSDPFDrT82s8HP+KmFx8iPoL+BUsZBrJzXRD0/UAQ8E2RydzaCoAhUQ5GnDidMj/4p6m8I6VM5Hz/90PfPYQEC2b0OaXezw9AO/AIok7LaMGsjVdSQEjIFmdybbRUuda+qihp+aI+C' $BG_Image &= '8QzL3xha61NNEJsJsYWI6WB+7iIlShDrroc1raqvHbsqKCODfY2wpFVUoxCB0BRkcms2sEJQ4bMWeFr38lq7FVGNGFFquCAWH36E4mIJslfxn1sPmfaXaucFqCIjE5hyygSiWgFoKUXmPMjk1jxWZjCkVDS0YXp48wCJBOmq2EdVF2Tp/3/bJgirC7TH2EwjPhqqWtVFQYMoW1sJIqXWAkVRKXOINbk3iZgZ8tIqUI2uLsgIDxfA5HC6IG2EZbggXqaMDNkD3VVftbomUBCyr1ykLAAiQSAyBZncGysilKEK9jpdESnSi3Mj2OvuwijY5kH8UMW/5zuxagRIa0MR9STRXV8IBNlJmRRRf6gy0VzNO7m7IEdmFtVKBG1U06Sqasxn9AhpDVGUKCTbRKFvGHwsKSubEl6c2D2+HpmjTkyEICMEYdPDUaI5DTK5NykfP9kEKX0OD9X10L0RRjyN+GgaEOfDdt6aIe/zk1kRFj330CO+ZpniXQEBQDlnHJt93Yi18GkGyOTepJ8mCLFCaLUXdV5RaZsSjn0ATAMFOI8a5DxT7oV9LHQcaxz919XwvKhhSIotU4h/5ji2WYJM7k3KPz9Hhqoc2QwxMV59bNUnC2OaHC6PUFbOP5+lJ8jf98GqcH20qn09nmiZYyYNjCog+HbElJi1oEE/Ztk2I2Ryc0GyLziEZFozoZohDbXuxACrvuAQKB9H8uOx/NSSlFkIO7wed0HUf8HzJAQRGJl/NtsRojCI0tvOPJmCTG7NJ+e8EqDZD87NUGN/vV67aizK3aH98RYocz7iECBPEDtlsfmVGXuF4XHTJ0MasbK9wa0f7Ze2lUjhU4ZNj/f7ff6ZTG6M/XmTAMjNEMpEPq3xetlf+dic3m7QWiHCLsgn2fFxDy9CLEJyFtQdzjN+B7sG1X4PUG5KPJYlZRNE9ThNr5+f5c9kcmOOzBkEsOmRyWVR9TGWxUh9Gfte60uZ7SuHC/JufrxbDWItc2aB' $BG_Image &= 'J4xegI/KKgzus+/LlrIoc+bj8ff8/ExBJl8gCAtemQ5ThC1E3JDn6/kK9sarVlCm9UhHPn7SZ3v7WYrNkvP8yWxe8a95eAMKRxUwPxbPG3NpPT5/l/TTmBMhkzvzOJgZpJp7gjBxJmZ2Rzr7jiqw2uOT0vFjgvQEsfMVt7dJlhmKWlt/avcEDX/HzMfx7uePHqw2TDvPT/r85CnI5NY8skFABAhlYbEUERI0VHVXqBYhsoHVth0/NsR6b++3C/Kwp1nLkaOSUUWF1TC1EYJ4y0czy/JjObeDGb4j8X/sneGO4ygQhOMuINnT6qTGod//UY/qEvbtPEGy4mvAyU40v+67ApshsP7xU6zNFuRVHeXXjI1SJy8WqbyIynfVgW49fMzysH7mFEuHt3cZcq9D0gzBxx+OCLP8cOPvpS3drPc9xdp8viADhf+TLzWPVmAnnGnp9bPyijAzIAUJ0I/OANHh7jb4Md4Dkxd6ij6zotZa3Ad646ds9jIFicbnKO/eYwuy+WjwqrXw//1enl4Tr+6ZEiPGRUSex4twAlhbCdLSEYtKhtwideJj8FfBQDcybcBFj9mbXtGQvRtr88mUZ/V80EdN6EqRHAAC1htTY7auM911CO/w0fr5fvf8vs6MAqbDGDIkR9c44NFMdhibGbNJtrxTkPdjs/nkGVb1yo2DpdTC9BhON4JemG483QPgSQaCEkS8J92CiTE8BoLVZvV22pm89SusvChI79rJ1W0nyOZzaa9KMkHKvPoEjknoWzvpiIogDake6FOP/l6GdKXJefTW29H1HTp8UnK+tWFLKEFeL2/neQmyE2TzuSAF+T2roNTiNCQwqxmM/KFID7gwO/ubJtwRImjGLI7ilB72Xr/JXy/0HtE7vep7t+Lms49sqKz6q0IJElqA2Gw/6FeA6C7Wm+QKncgJ2XEbcq6SJ2Z5Om87bYww5s5OkM0Hc3DFLD+exb3OctCPYLO45ZhCrHtYdTi6cWmegoj3' $BG_Image &= 'xaGSPgoQwgCZPbc29haj0pD+3gmy+WDai1TyRPHqBDELaQism1GGbgSQRLkGWQmiCFl2SIwLrUEWNqEgrU8/BqjdFmTzweBXlR+v+nTUsvbqsiiHGklHwlOQGugmJ/qbepD3zaHxTg8FCNvRUKuffTBBgpZtQTafC34zQISj1DtD1p3elSCnkeHDSbTeOz2gHTZrsuTQpVMPNS3S5Yi1UiveFjFG5EJ9C7L5bEGWIQWeCTI8MkMYITLkShBQHlCg3mXEtcDQWykiuupegiTNq09teg/SP/ku1maD1x0hjuIURAARuQRRguiKgWid8jBBJIHsOLuW7EsRPUScTShBrJmZu/Hf+9m/IEE2++RqcieI1+FXgoQFtaAcMgSOZg0edObUfdwLrcjvRyBnpzVUwViimY6cIzLkvQXZfCxH+S1BRq0uQdy10EBgYmFyhA2IFs3gfyRIP+8E4bNzDnpzpYcaAQdGSxrU46OnWJtNK1WGlFohQUjMQqBj/TfdmSGBhD8ySylyiSH6NcHSq670UHwI6NcpbGRIP3eCbD4ZXHvTPRchvgDuZ4XdEmjqBf6Ud7E4iVKCXBlCjkyIOztsNgI2vskPSZDPTpDNpl2GlHUbS5MsZgjCUhGmABPERwaIw0MP15tNqAZdoRaCesyx/6lHQ4NNMkB0j5hLkC3I5oM5SqmVgnh1rN0mIrRQn/RsAffAhILAVipMPSgEPWGlHgtjJR2GBgmlnEmDPj1BNlsQhE9FqntxUJCFNKABCgHDcAdcszFE6/QDYJZwmrVO69X93T7HLj0ulZo1+rEEoR/z+thsPhhUhA+fFC+FglS+JStBTrZuwwdGffFvzX0AMYtG1UFFjD502jEbK6EOJpAB0pgp6cehXVx9C7L5aNpTq47wAnjxSc3S8xDci/TBf+N0jIakHuGpyxhhEkQ3s5KeehhR0MAmTUsQJg0/3Ht7bDafzPGsPhBQhsgMjStCtJAAcm5V628KorU8/eD6' $BG_Image &= 'hYacMkRTLJF+iEZJNMMS7zb70cMem81Hgzx9pI6qBPG6BAlEYMVHD0wTqvO7dvhihIf7i+Q7013bXHvQkjtBerrBlmj2JZE+/0yTzaY9q3CHl7oMKT5ZinQzjJeOuXrmEQ8OJkiVLWNErjtM20vkgASRGMhK7s3xJ1f3j83mw3nWezOWU5FKTXLeRT1EpAw6TZSGaI3ioypB7NQ5vZN1tdkSZG+8co2uG16zIlrbAbL5eFqRIA4Ur1681FLrcIcD60QsICdXs83vwqEh/MQAMkZqzOCQIayfSxCaQUvanSD81+848mezQXnWMbxkhFQKUr1WZQiCguiG7jSB6ZGzqtkGIAIMEApid4RIDwF26B6WaY+JsXaAbL6BoxX3OqgHX5QsbccyWKKoeM6a8fGb36DmDhiZ4/9OOFkJYjkIpB33GiQ/mK48NpvvUARtdnjJAFm7esO1GQsIeFJJxofnxsPjJPcRJgwPYRdgg4lcf2ibfGuPzeZ7OFBKYYCw1+oDExoyASNkFj8wUbq0c5LDlCMbUXz8CBAZcgvCoNkrkM23zbRkSEkHintgYup3ihSXHpZyHAyO+wxFO7sMsUVThCzGiDzX/dwLkM2XwQSps7K57mJF6hGpB7tnAxoNsUOGsH5s42X/mSBLkOiN9dhsvk2Qp5fKqlU5EdkMwgORevz/uTgNkSIcr6N8LTstwqzF6aO2htZ2fmy+jjYFkR8crr9LD3UHUaS0WQazw+784FLkTg+WwFXUZYzxfhzbjs0X0p6FbmRpM9atCAUR1tYKY23MNdphs0sRm5VN3PMr2Amv2HZsvpNWaMhsLC8yxN1x0Ww23b3KEHkLy25nYqxrrztY4JW0+Nrvfd5sDs6w/liCODSySLRO2nl0hgaXH2S+TkGErRIKkNmJu7fHZvOlgixDigxZhQKOMVvE7HmkydmuY93nkF4QpYfe/riF1ax5rVuQzfcKogW6r0V6dsxWQD9i+CARnbQeAGgDoRuq' $BG_Image &= 'dSFg0Q3htWxBNl/KgeeyQ182JUMK1MOdgohgmORFe7Jmipg42ZUjRAsQ0eCOx2bzpYB6+JMzLZ9ID5aTwVZ9sIiuTJXAlRo/80O1APYMa/O9oDgD5FkmtAHuhQ2O4SPtGTrHt/IyZiM+W+A0IUluRe5rM0M5HpvN9z4IoSCl8DqBV3hBRgnVmfzWV1K9ZpH1pyETmAFYhgjAWIu2Bdl8M62U9KBM7jmW9CC/XzXrGtYLesJPLkN+BEjLV+CIx2bzrRwUpDJAnp7Ay2xMit+zGBrjIiJaTObLKk8oCXAvQpAlmhk4tMdm87Wg0IZyJwh4rYwI2YHRotGM3vqR1SNmG+szDjBBVmyot2VK2/tMNt8+xyqFhlQJAvohhnswNugGmwzRq1CQUJD7MF+wYAsZsgXZfLcgJadYd4LA66xJpgdmRZMkXXZE79HTivAxC7ZAFoc7Qh6bzReDMqmMESdwL7OL4QMxadHZstQ4hE2AACjLed/EStB0n3cHyOaraSi3Io4CeDIw4BqXIz3RJXpYnxUgV35gZYhk2TOszbdzIPWYOAVhg3MMDJniGBjBNqtRkZAFosO6JbJDYoC1Z1ib76elHKrrGSEcAb0M7TgZXnObSQiuQa57uwtciqxxC7L5dg6AhsyOIjdYDgTC3YuLOrzqpxNaQT26FBFQXYbsNfrmr6ABCpCih+hr6aH6QTg8ANxPz+lK54VY1kSD7TX65us5GkrqkXYUlyIIwDFYPvxCGbKsEGC/s0NsQTZ/CweUIUX5sVirELChrDwBsaT/3xBi6uIvWoJs9iQLKE4JXB0+KyYIn33QlqxAUIwuMRaXG1YMhBfbgmz+ChoNqShrSQ6NrAGP2TTt0spdOnAgmI2FAORJYWNvhuOx2Xw9DQaUUlC9zLoTJEusq0Fa0BO9Sz1uCspscMC2IJu/glaaAbX4FSEaIPq10ujZsMbsfCN/qAztoB4T2rMF2fwFHM/S4KU4i+2SQwr88SUHzW5h' $BG_Image &= 'BFgFSD9YDq+evmxBNn8BR6kOSI7iRBMsg5GTjYeMHvnFOTRlSXIrsizR1x56+lFfz/LYbL6dA6XCQDsqB7gXTMLENOJtOtWdZJb80IM+CGpG3+B1fov0PztDNt8PaimA8mNtyNKyYkFFpiHvY1oijCUgFCD64vWSerx+/YvHZvPttKe7NzBDSnEHO4l7kvWe42HvnGjZKhNQ6Q5WZXs+pxyT17/Px2bz7bRaizdMSjrCMMHPCLH/2DujNIdZG4p2Gif4ykLceej+t1oJQZOZDXT8fzrIgP1+PiFMHJckqpBMIPnwpyDfh1/PZzvPE4mI1LvC4vZ8ze+TvDIFRBERq6yIx/oEw9e/M+Yn3V+uR8RUJP0IQqzj2Z4niM4AJia1xir+ER+xTkNilfXMLd99nOqdQjxxzH+Y2nrElX6EIk+P5+nAYYCgVZle3J7jGV68whB3xdv3IxWZBrgkr1AjN7R8tpJHkuV51B5NABBKGscwB0CtsYr784g11uEmZBmSisxC/fVZhHzNibdfCSQTz/NUKEAqSBOLDidqjVXcnkd86ccNec1CJBSJYn3W6a/8bfnS45XJ4zOBHGvz6jyva4xOggrQADPDWWus4v68jvkR68eqJqYg/iQfbEN+sxLIMZV6nqpjcDAAAQiE3p0lSPEPEGSusY48f3VM4jYfRIQiEb+I5DHLD0T64MZEzCg+oIqQ4v58ZQbJjLEVSUHyUaaSn2T58e1qNdHeM3/MiwYLQSAAWUVIcX9B8j9yQpEg5Igr2ifpSUTqkZ++bqJXpxm3HhSaIwICrAOLxe3xRJB1+hYiBNndLz7OXoUfrWmQbtBoiZhPAYiVIMXd+cptrJBkG+Gj4913TBN//DbmiPRxPuXEdV1dmVhclpqIkDC2fxXF7UsQ59vbu/R4i7F+KfI8NlOTZxwraQ16aYd9LrAGYTAjBCCsBCluzqHnsx0hiGeRx3M5Mgd/8v6jaJ84R0Qkj1OaRPpA7+Rm0IbR' $BG_Image &= 'm5gHAKl93uLefEHDkHcO+d55Ikg3vtOMDc6zeYOmHkYlwIl5GHcdAhEpQYpb81IHrWWh7rgV3k9B5pNQIy1xjRzxq52n6eV0JvC2AGwDk1YvQopb8zqvMARhwXfmkf/ljuxyjbWRqD2ep2ro0Tm2IAsjYdFyjWWjXoQUt+ZLVK8wpLUWRuyFVrR0JAbvw542rxN6BdpJDC5UlYGBZpCYmIhUlV7cXpBQxDlbJJBsmUdy+2o681y0c2YPvXrv2ocN/sQIA0TMcqwipLi5IH3lA0eyWJ9rqzQlt3jX36m3JieupA8lmXqojkFwATODQAQwqS83FP8MQdKQlqki1NjrLCclaQ26XLp6QCoD5RhUh7YzCGQGzOpdenFzQbKi6GlI2hHh3WQpI2nHphMdpoBClYkqjDYRQ6YRs3oTUtyZL8DdGJfTVRXLkNzfXQkkfm6+c0cynGmEAmDebZDFBxKrE+/FzTPIhav3K5iLrCALEdcjJk3CoY1effRBpaND1eekj1CaAwsEJkbAZ1WEFHfmAYQd3dulV25lBUfLBOKCpB9vet8ZYwQ6RhpCADRCvBmJJUqlkOLGHJeiO9fOIe0IPWYK+Y7p+av4mH6wc5OCvI+Z0DDFMANDj3qbXtyZdmnYMZYfl8rKIM8E508/nDE4lDp8jHCUE4vAWmYhDYGPZUhx600s5AorOWNtFS26dgp+ZA8PpSr7rkBm+phdYrSI1IMmFO+k6pDivkexYtF0jW2InunH05mHrvTDDyd06CP62elQDiaW1zIkBhgImLAMKW7J49K5xrriSlTmJu9/XBD5kT9m+sj1VAyZNnoMn4bQLCYK26eyADErQ4o7ItApx/DeWxAbWe5HpJAG/Kw/xlBlKDEt6cPp1PE2xKJz4JgJJAwxj1F1SHE/vuRSb33sjaxA0Z7H/PmH4Epw9YSDujevGBG6vBlMQbyDB8yBeAOlDCluxwt6aY/sod45e693/gC3we8T3X70kXqwe++t' $BG_Image &= '7/xhyZ6sRzCZfhhQ53qL2/FA10gcIyuM8CRQRP44ml6Trnk+MaTQzmCMud6a07xW8RHNmbdxA4gDA+oLJ8XtOFyJKcbowZXopfBCpEGvRXfoMSvyLNDzuImmLj82erFEmb0JJCTxqEK9uJ8gOhdXY6wSJG4nCqz6vTvaJ+nByF7p9LwxD/vcx/KWPUUEaUh96724G7mI6hHZnHykgIYtfcPOQY/c4lWNm5QlDXFyhAEWjaBfjhiCOpVV3I3WVcOOqEHSk6SHID4i23uF5ZAEqX3QY+FPwWSaYR9f/xGACOplSHE32nVpD0H6LtK9TdSJG/SJjp6luA5NSZzhkd1G6QCEwSacHQgBOo9aYxW34rg2fS+xfjzxSzu8aR4vmdfI8+47laQeZszRI+/lY7eXAyAo0l7lSHEfmurHMasrI5lTXRU6ta+Tu+w5zgeZPX5jWGqEI1zzTvityL0OvxeVQXTbkOHdpgfoytFTjxSEQSgS96TyNzttMIKJAWIGhRC10CruQjtDhLQhLYl++4EUo698EcG1vppi+POcME341OIzfQyaBABCFMrxeL2+SpPiz9P60mMLMofF8DuqsiuV1FWDuCD7N1PgZPDjTUgKkpJsPWICmIghJkQ8F2nH41GeFH+Yr6aRM9KQjM8Mwk4d3nx8V+c50xjfmLdPzHYfWJB+QEQwm0MS0tyTqtyLP8lLLr22Ibvpx+l29k6ObCFKVx/zyZuswt95g2mHWK7Kwg0PIcwbRGCC5IQAQqAd5Ujx93icmTCy/1mEdGUn9V2da9QiOq7c8f0EU4vPk4obVW5pLMwAzCAA5O3IeQL4g7tbRSF4y/He7s2bWaBrlOjTC43kQXqveUxx0BHjxjK2EEINO0BzYCaI8EsCOAYxMRCOBEcpUvwpXoBeE01N1pAXh44+kwU6MbrP+/5BYbImZjk4+TDvdYQn0w7j7CUiLfELHraTicQorXa3ir+VQIIRWnzU6ppTkponS5YTyp4Z' $BG_Image &= 'JCxIbEUOZuuZukupjETH2fJOxCCwJI2RGHDiFCNNqmgv/gavC7o2edVbxMep3tzLJYZyaO+qVAUZ49sOiWGSaSP73ruSJulMOEIuH5C1iMh2JgwB6N05A7IkKUeK/zPtv+ydh5LEOgpFN8+gRsD/f+36+pRoeffllEbXMmDUXXFOIWy5Z5oKxibevCXJ7av3Dnd36og1HYEP5eRBhI/paoQkV3GfgwxvT+mQCmvBeqvGZe5K83EKydHv24G8WEzJeHcgmMu595ZdOc+y8i4T+LHft8Kl9wz/IcSoLnHL6NcNWJoPPjqGubVE0u+23Do6+rC1qsK/YGNVlVmIFsSqgAMCMkBi0F4sklAoM6xo0UdYQUJRTq5BJ6IpTVYBzBWPy+u08cnNrd8TkqPzo6P9m3Hevcd7ieXNQ2W6c23QULh+OijlpaJUUD+iyoZRWESG6RQISg+7TYR8WdS4ZBXDuAH8+XmNvr11GDn6jfWfcHDQqYM2HV6k3O/kio4wRRpgQZjUhlpwyHLQlo9Hs9FBDbKUDE4+CXR3BEKaKBvnYfvRb/yjow4Pa42Fo4LIZxRyBVyY4cHjsuSdxnzojAE/TLWNEUvEhYeKdfOXeEimSSoIu1M+zttWR7+dPvz9YNAblKkYzdw7chQVJstYyizX1E4NNYAk8bi/utTEjMJDBiVHMUut62Q5BjIfZ6119Btp+Oo7eAwCKxMveVIn0Fv92CPWS7he0mBGE/FeazFKrlVSPEUpkXAVAoJd8iAiDekwcvTr6+8GExMgfI39hcJCWRHf8M45fjrpd8euuInAF9hYr6vIPbnAr1BgINNA+sTHqPFxHiMe/cr6j/vLvfe396536YUyk7/1DY12OSuzEBgwuIOlXCPDNDIc6u/s5WPQ18vDBbu25JitGFW/8s7Go/OqVN5EmOwED9igkEjzXRuiCN4uZ15ja8ZhSYMMcS+1hkKurNdgpGjhNaSmQ+NdQIoKMgxWrui07Ee/mv45' $BG_Image &= 'Xu5bb84/KpT2l9Iza4k6IPmleZ3bVE8rbDQ6zSVEKLZwA6e3Bs16N++EJkZsUFWwQKKkxSkjR7+K/vNRj9u6dp2Kp06IAZAmJAvn6T5ffqnf/sDeIzqhYLuEFzN5cmR0wsNoXgbn6MDYvSXLhA0JSk43cvRL6++UDx39UND6BtYEEQCRCjqweX/PCwFClw2CBcqljkoReECNhRGrLKAxivqxBhIaxvyjbedQ8p+njBz9kngkhYOnhLQeXHKh8ULJ7zTAhmdeU66jCoEEMBAQ0YEQLyasIAZv5Ts8YIIItww9iCbkRov0sBpnb/zRL1c9ug/v/Vd2HbNbdmk1Ia5GnN2KRX+y6Ehcr64udUajF1ddRcZYGSvVhPIABlxpdKbwsrTsrK+AguJxD4ipX2Sv1tHRf0Y2Hk8ZhaR//OdNSKU7Naae6h269WaDLPHepNSgfESZlVXJ2/NpCKJW6AxkMUgak4CCDHsdVXZ2/R79TP39X9XbrkwGIHy+11rtlqZPJ1UVqdFwVL5XV3hc9yUbIVItIpQykpSWNyKF2zSgQuJT1BNrOEzhp5E5PfvRT9Z/6m6w+3dG/VE/OFC3IcpBxy1ehaJtp0ZsXTm+tkhxe++OZJUW4tEkaKBW7zihL5dWjVky09DW+MuY/eRfDzo6P6L46S4sfPXnm7yXVvJMTfeZ6ZWV/WB8ZKSCBgMbVBMNJoPjTULhDcunYm87CKuK632BxZCxrijYTbzPLp0icvRTuo/xak1x8hQtu8n59JrwYLjc7+KCixdQMDC4BAamiJGVAQ+xBYuutXSClyHTKs3ZCNMZA+EpKC0yOiJOETn60TevvCYrK3HglAwdrZbYAIt1C8uTlFy+MVHUcHAoVlCo11RLzBGE6YAHedwm7lUpZzwo7F5FlEDI55CwJnOjdIrI0Y9cXq3dVpgJLE9GHDx8NeA1L/G/D8RDnyjcKuhKnpt5CxHBDDMdLG6sdFqwuYopigYqlla3D8JbCmjP' $BG_Image &= '5aVmBEys7PwzxKMfrn8Oexm9BWdb1lo0JWiuVzxm5jXtyb8khIvUQPbAQqZkSCni5HrRwgxzxkvrtlZYTMlxjkAEEPJsRyzGQ8ZpMnlWWUc/UH8f9XLjfu702XpNDCcFBkDu06tKU3kNqaADVkIDBQY1BpWragBHdyP4InwiwSC9A0IaDThR9B1STTqLrKMfWD78RechEFq+MDERgkyG+lG38CAhk1kouncfDzJk0Io2KvhAE2JWgUY7Pl2gZSQ16llIZIZ9FyA2ziLr6Ift2xUDqg6IMuJQscmucadcgKj3KPrxd4d+B74BUvTsKStRA3ZeSDz+7LutZzQgLbKDudZAwaGEkUOt+2nI0DiLrKMfsPPKLwkKRLBUiw0jEBqX3KdsXcqbI6d0YL9LNBwrKgjAVCeKTwFBBTLcaEKGTuUpGv0OiA592PYHIcBiY8+dEnL0/c8+zJ1d7bkWUNPTa0elJtaqFJdzW5cuJF+virxU0KEoYQBYynPHo0sEhkR0Ay+RZE8WN2wvryPCmFn0GGDJQ8AwAKDEiJVNhlmK04Ucfd/Oq3Hj4TcMeUPh8tBRokH5vFxlZSpFC2I+wcGrQr7gAb8rvuOyCZEhAI6nESVyb1UJmlbf4+WTyKChFRikOYt//e3o6Duac62PhMhLWPDPonRg4GLWJbiYxc2s+4N1G3DYbvJyyVUvpVASc01LTxXZOm9cEZoFWY1h9eg/KCetUs7kdmz+H5A9Y3ZKyNF3ra6mmwrIrbzk02v6rGukl0NKigwBoXhym/fiKivEAaPeT0KyfDUTPS0T1Qpst+KdJUk0mpM23yB7w4Ab9r4nDBTYb958EqcLOfr21dX97NxzTh6Fu9cECwXp6//XXuollgDJYk9K8dVKCKkGRDFhSyhgnoBkdx1kZIYS7xxfLeNKIkWAxfFmFIm+RoR3ymIrJqeEHH0zHvUye7mASIqHe/E3n5PAZ5W4mPChCQApr5J/cVuL7/fffWokASLV' $BG_Image &= '4cYLwtfWplfhNwhGVK+grB6Q5L6bUdEovmKD81b3KSuBP3d6j75xdWV+aU5XVSgAIZ6VdwG5o5uNzCwiSS1IBUWEkuFizOFCB6Z88RDY2vTsRjC4WPiMAg2FI5TqLkRJZH0hjXU3y2wRQucODgRQQsbOnd6jb9qXaG5+jZe5CGFHlbuV033MBIcqdiJOGnaadLDIigCC3Ft1Qi9zf3QeiUFR2NC0nOw9UL+ubrdjZtRjPga+SuFKsKXXwizuAAiAg1JCm3In8R9/Ozp66J+j1HromE55SJfUipQLD0UPVYmNSt4UcXEhUzKEqRNESk5D10g+ZAMn9RORjhVuq6wRLbKktyszJtWOYyQyCyLwGN9wRwudNdbR88l5mdkUGiof0qxyCTfdhQkqJ0SZSQV578Py22QuOlxqKPCryAQmoqcJK4ji8bxwlMk3GAOE3l+x8Bp2KYbx2EMWxiTSW/ch95SNUWeNdfToPvidXcFRVI+kcKRjaTjABVYWNvqgHpzwCQkkqBmuqyR6dulRrcjtOlcYELI16CUgjEv4URj9wVLF4KZU2WUl4yMyiPl1lDUUmx57eo/OzSu75FMVJH2yOup7s92ru3ziZC8/p2Lx8cpGI4sPlm+VQnYjqFEJLFdbZ57EYbeNAS4yoxYtkNFF5M1QOWwMXhphqt57FYNw1Ddv7rV9jXV0VlfxsnkNgwr3ykmpyKoCDtZVmXWFDDQ1SQGpjACIot2QYANbnO2ik6mYShOEsdNCGMVN3aGIqUs16tGGiB/bfsShmDY85cOiwyH4njuxUJ3tJkesrj6mTb/GnJPeOn1tzq1c7QOQVCmQkWayxuoFVmOwseD4TCyuloIYPaYiaEwMGvjrX06mGcGAUS+s+jMxOL1MxGiW1l1B8YDQHmx82FCROWuso3t1FV4mPOw66DRYFDmrqVqLq0nh0AkYiI6eFRbFY2/Gk1R2JBUSAKiVmIeaBQUV1qluTN6ojNWVG6TUEBRUGitd' $BG_Image &= 'h5CQ5dDoXyWFEWRnu8kR75zbp7aWmM2iOfd+idwri1YjnWbEp+I5J/XEp84SIPpuVHYBas6SMuLbSiugkD4jCrW2LEjs2+HHIKkzK4YiQdB3cflwFZf0GIV6XxbPPmhEaljs6ysZps6jkKP/fIy7FPDCh9Nz+JTJSaO9akVi4IIgZbsF6acWXp6xcHAnyOwKI+FDyYUCs1wy+z5AhnOZkLp+DIymLKzMrKgO/R1ifgklEP97CjNMZ7DGGnHeCjnSS4Pm5u42k16DLqEmt54KGOCDc2neJyZrssKCgQ4Y+453QiYIWvl80zZLFkpIZgYEGn6VFi5Kw9hUstih11jfuqwN5UwI1b7R5PFKITkZO2usr76zZEy2lkza8P4DzkvFskpS+k1HdnSvt/ATQEDC4WJvNiqfXHT22bBzMtds2ErGLbKc76KSMpcGfDw1opxt7iU8BqSESgcbs6wBQcRnjfXFHw1Os0kBKYpEsQX3BkKeVVTf6L0vUxGBxBfYoLgQ4avrWlqNe1NUOwsZASdPdWXY0GkgurDQgvTN3GZn3yP/bkpo0IeRpn70z/buD9XNdH3WWF96Z8n0ac6+9RIiq0GfpVC0yKfgmO4FG7p6iRBy+t6cfZcXvpR9Lqq6pHDcIx71hJDRCmyCBLYw+KJHJ1vgYaOCg69I06r/ryc/4VAjFh6qIArt+Ybh115jnY27qh5WVSYcFh78OSvW5aQhr6KCtFr6Cq9XZWVRbqrkBApxCjPFnKSiJGwSolQcmASFd4PNNW4F2/uGAoPI4GdN2/oMy6kK2FgF4/ZEARqoxscpIV+1O3ezF1sT13O8XM1HKXB/FwwFBRBqOxD5qaF3pLofvyfeXbrA67mlJHw2KKGQTOjjj/2KiZNow/tqtfWjlDYLzZu8sg3JCGTDLhGTW/0HmIzW55fdbnL0L977mB7ptW8/N27xTpfJVMSfPE83JtDUFbwUykm6iZVZbMKaJbGRl44dQUnb7sT9wQ2j' $BG_Image &= 'xESM3BrySlew7UyUq31/lulSePDDvdUtTHVDYpqLWISU2pB36ZCppsO+6g9knYcfltPnFCEplXdvzusd/WtWPBTsp+fAkhoz31r/9dmLrv1VNOZvwcvzbVtgISAsJyTl/RpIynKSIiwIGPj9Hpe6CdipsT4qVb9DxTe5rEF0mSVb5qyxvp7+/vnpNqcLBXOv8mLPlXlmzfLrrER9oxdHUJ4P3T9c7SymIAm8ujOX2Xr22/S5uTXXCo1WXML0Ft7uxVERDQsbNaqzVeuLXPZaKhRgOrfr/FO2r/mTiSKDztWnXDcJs6as4icgmHmfziQ2pyqIAOHvm6ciTHZns75BlgPljkUWNmRkYYFc6CSqYSyoimlQqB794rpRP+ZCbRSduXzxCCSQYOFsfck11tE/TXuvLnmae03acfZdsdlKkUTTDhUUhn7sAR7FB6ZqCAxVpUtMIEVeqPsOGOnxmGtRH9IJ+wkhfrBvl0uygan3r5xsd4/JvKtKUDEApQFpLlpnz/tX+9Eru985t2mpMuJVZZ5ePODjv//XwqMoGxqpgUqTEjb51yDuPEIvCNrrhSzBqhALQBIZ2y75IInTBDb3l29hgIlREngMAmbXp1EjAxyAwdDZ93xRy04T8qX4GG737V1X5RAPZXO+d7gLF9/+/F1sUD1oz3WpABVOj0GEjb9vQLUoM5qTsFmI7xNBB1ErsLGfIT8eNaWjIC8VpgDkkeYlkCYDVoqlV/fnnF/vRu/Zmzh9WnpNHXkP7l950nzMhBCMS1Wyvc6iHKBqQLK83xJsdQEBqeqqgX/uPekI9UPCep+YvYQ8jv6UyeZNUlCPnhqFgxAC+ECtz9OEfCU+3NzsbqJn6fC6Ii/PWoT47MZaWg/L788hLiVZBB++VYBVO3BJ+8IEs1zsBrDaoi4B+BFUC5MtLjBFQGJUbF/ONQMERLW/VqhzEHX9wNtX2rB4llef7v56L6lq1qXkd0lSYa2f3k10xV4yl6Yv5d5k' $BG_Image &= 'sFORTjzpFXgKvigi6fiS4dyvaUoet7RaC4F+K0RX9oRpp0SH2VZPvNNo0+CUTAFY7BXEzpOQL/Tm4PsNWdeBm3VZ+o37MjeBRn+tL5mtRFphlb9mVtAfeBRNv+zeozsASEpshlT7jvZFFXh0acCQgJHuUmqbyGQOMQsV3YgUwTc26SNOE/Il+Cjzl7lP5092TsfBSKVUE3BatB53lZnrVfQ7ibqCTPfSbhP+Il/Obi5JuVJQveTaTD179GIUikIjsrt1gvGEQ0dfcNj7Awh4WtWbeaXRbu/PQ/5r/EfPo4+y6fbf9q52yXEkuUU41jFNJSDk+z+tPUIlokSz7/xXOqJbZJFia/aHsFnIz9qTSyj0dKJOWION7hiIKf3QbkWASPju2WIJjWJRAGtMVGvIZKKEDJL07Asdon6aUaZa3srXXUtm+DK/Yz8SIPQfRww5g9fNrq0+IkraCyPsSCHuf0jV1B39IMjXa5V3qNlLjFBCCgGbVOyDGXKCn9tMCFmAusvgdOVVQ8hEaHWIuPy9T6/T8eRCnmTz1EEsQ47TF6s7+SfHMU1IW1oJWceKfhwRIP7pvz8mTsKFwc/Pf0I61l37gePAwWpJhOPnXPOhxJZtRPLSvchdhwBFdNN8SSRxDAit4OsvlqhwNfsKrgi7sJDOeyslxTfYzcueTxVB4pNiSnaWdLgEmCmv8qfj6VzeYI+EpDT95Od93pGQ/4R5tYWDJcNmghJJaSzIKqS1ZTG4BElDNh3J51UrDKmyBUlLd3VngzZ0gHp+MA+cnVlq5XK3GX6tYQi7Y8s3TwzxGNzHug2pXUFlgjyfpkhHom/WxNXqG0n+PI7/gEjIzY8fAOCWoNtDDlEOoZPeX/WYD7+ZpooAQQjtv0gohKKqyrspTMK6GpO5mF7vHV/VW4HhuTOpWtNWMfJas9WSrzuIct9H4r4GgZgz2vOALTiO1ZfUQ3RctL7XGAZtg3K3IP320nOgeJCEDIrrHIMidYts' $BG_Image &= 'idwUOpADEdDy22wDqwqckHjkuDkiKfHH1jsjtG6k31wYlGMQN25Hafh6y0DxKnsxQ/Tt5Cf6b6Y/XK/4oN+JBunHjuctQr66a3umnVuBJFmXZgq9fkcIkSz3tSQ6/ePGf1tVe+JImz2dwOHcyGWgzu2wR33G+8zbNQj9YnB0pzYkKsVEXAQJktM7Gt0XJs1Zgvw873Ssb64dbOJAYbxTFEmORrfN0A47eYFqCfI6pbYA1RAK3Sg0WJbmIUICGVg7rMQC1/lcP+WfbM0uSPTeSjR1hFluUz6TD59HpNUB+xdp3kl5H2TiVHCLkK/dXf3zOBw+NyuAVVm+jMe8Uv6BsSaO8jF9FUmIoG82UGqATvGtoqW4sQUDk5CF3hkUXmTpw553MlnxMSK7yAhVHkOQxEZCFLPEn3macbgTJWfzZBbR6d9cE3KL8+dB4CgA7JVZshGEFNmKEdmRMpBU23IYQ6obJQClllhVMjWEVkeDA/A9szJpVj7tU3RCFq+ekSDohWye1M+zu9fYeqDknOBjKGIqTUDRiPWwJJ+R0MbxvSLkzr3igcm+Ir27kpW462rJFmkLEkSfk92TX2I0CC0v7d7QughFfwvolKdnBA81ZMghDImo92kXItjtx2mezpbCe44n5pEG/UkbNSLXjZkzFdth59aO4xYh32g/jgMFb4t0NCC2QDYB0VQhm7rGdCLVcAOS2kLELHFssEAUkKhIwxSbcAmcRx8D8jaJTSHWBE+UN092IVNuO7R4p004s7t+JSr7rjeG5BjhYZgb/wEi5M5tP7y7Yh2NZkOUHBAnaX3e5ojlez+lAAWAVCpArKFHlvTiCoFCFUd8OJDYUA+NJqze6FP4/LLjKPYH5FXKarOxCiFMg21xzuSFfHWYEEdY4C3WmSaXRbffGAm58d8vAwKgRR6UlYHIVvf4sqh2tklAGQ3IlkMz+1x27DpVJXK9WVWQUgGFxSC0mZJwx55mEjGvfViCTxKUmDl83hGL' $BG_Image &= 'sNWZ5w1FgywLIm3UynDcHUl7T4v3FUIMjuedjvV1G6yfRMA9WY2Te0VSdC4We15DjQCi/1ad1qNTOiUJ3AbrpCUWpLVtSvajrcdQQNEafjJuXGiI4Dh/NPxZWURcpFpw329tXuAOHU9+rAsnVq4yrDAIT26CfF1r0Z9a+yPy8E5KTXtTGf3RluhkAuwGAQiypdimhBDqxnBDXIF0l1zZYgBqbCm6wmm+lNQ5JMnXl7mg1iDoiAoNVVJa2IHfiPXouLdA6nX/2KupFlJtG0yGSXgRHLcI+S48fg6gylKbhJpJTaTNhyFSZELqc0S8V46JW4WgCwZhLiQMMgmIDqD4aLuztH5cvLKeQTgiky6X77pk0+KzPcoDuYxYD3yboOSHzJFYkVAjlHGu4nNvbBI870jIt4VAALe/EtRLkKvpLccQQxQ1wXRelNoSUkHzpZedWWNPZHrUBAznyw9yBlK19uxEJeChXYq0ydYR6ZopbDhHOSJA9hTERD3Cn5iRiqN4WskdCRcOcr2GILiKcPDnFVa/C9O/LQZC4JgAuMTFA7V5MJQYSeIrxXyMGwuTbjUkQWfdIOlELJgZ6+1M4uHYH9uIkEIZhXhOYNSIcqmNU4hjbj/6LEv2HJNAVENaExMeOy8uOzikZa+nUAXfJ0LuAluwkYR22Zc7zX5I5doy3T9BWlBPMHBcuNJYCkdCCBYK6l6KRIkz+u1u9QTUzYCZIBIaaB+VMBQIQaSrQPlTuZdzPL4BGqS07c22qMcFzAtPvj0ex5/H408m3t6hwi9r8EN2bIJtRYui182BGaNhkhEPFvzTSgqv31FHupctCNXTehTqSBVEiduU9DakZ1fyiOZ48wOHKI+I87+H1BNqa10tPd8ZAzQkQnqbUjXL9kU404shQUZ7vk64Vfp3EcSbIEMSKZkW4+dlk1sFiB8LTUop+KA2s1AOp2fkbaFQkeHhjhrEdNui2ZAeEG3aJKckjLmcQbWrEF+EGY/lzHqY' $BG_Image &= 'Lfnix4slJDiZopGHFyFL4oMpKtzbNfj0jZ0b7ihIj2HY1Ua3pHivhiuhRtJ81ymAOiknDh5qXVZhS2pMBi/qdbYkacmCPUXqUR4y48yIIJm9gVIOZWS1L/dCkJ5tn+R35mU++feiPsR8+fIe1nceFggBigYhl9GIKPcdZy5qfjZWkFKuEy7MTmswUZA4gttX4yHm+usZuz6ciEfLvFKyENUnT+8VlunwIQpjmLAokv83LCQHeIaC9EzOiT6JBDnh+DoRcluQRDAoslMnNSH0RZUQYV5eDLKExnJAINqCfVJ5R4MQmRRiH28SVdSNzCtEAuWKajm7tNDvyPc+UUHLj1N0PXYmFqS0S/zV92eX7Ol0YoIcbwbkz9iPu33cVxFkfUetM5pJSjTWjWy5IuVF0FfUO6wdoBLCDXm8LaDVWseShICi5BuuzfXROiQ57sOatXieyxK1u6ZMmdyQV3veb5S4hjACQe0DFDqWoxP+8MjoBdPDi+DbiqbuMAgIHBBBo8datGjIr2aHDeDwRCq9o9cOa68DSRwdWqkgPe9R0OYfFpaDd9caW7IW4sp6E+nPvaIq7AhOMcLwJBcCJ1PZj5oUDwfV2y3e20VSJodPxtmjdYuQ78E/INSHSIJUmyCbDMlaFHvzYmV1QhJ7vb9i+IFa5kPJN0yKy5ITHEUSAqTDIvw9FtzefZfkOzEU3d37KkcbgBAkb2ulLO9/4La8tidLg3juemKF5yihCXLcIuSbCALCXz0qfDCUA7PdigopneRHK9YFIJoAyZk1RTuxpF6qAJLAzCu0cUj+e1KuZMOQWaDAokqqEtMNSOf4n1eagEY/Wk8lXrInokgUWVSSVx5bZ4enkTZZmTrVqyjk+cVFU3cxSBWAcCHsUDOn8KYZDWKOkIglgd9znDzBDyXT/XU5Uwrc7IRoDMVaC7EZkEKBlNWKkyK/mw5TJA918Hzsqlx7iWGgw965ImOPFjPcVytG49HHau5r7XHZoveb' $BG_Image &= 'RMiNP1gmhDzCgxPEnJp7urvJsRbRJ+msODssoUwWlEN81UrRIXQCkLYOhtkiSMJa7vocPmVvtetx7A2sd79Vxn8OoSCSpbmb2IdXIcjxooabKG5K/RQrvEXI9wTSf37Wnt/kmJd8GbTE7l7siD6vxRWeCALGgVUA2plYrrjNRGhzpzXotZw/pdbsg62TnNPfsdVUKSxKD9KwY5cgCi/Mk9x3mjzJYknvicC75Hgd3Pd9Wr0/k/G+4+eLIiE3QVJtyxP6/UKiX4aXoMIQ7iodcWBFeFcVqoqkxNeq0ICpkdeyElZF2TE5po7x+kIrL343FwmLpDhE2S4plqNz1rMDidYg5m8aokzoZPDIeML0WHxrX/2NIuSuBikAeiLpiF5QUm9uXnWz1Wc2FCXx0oYQBIlOqiJYgUMlNgYKSTTBD3C/7Tie3+nEQ2JV/MiO3NojISHGGAi12tLFLu6yBpHf7oQIA4uO9jKMOfl5f76MIHcgfc0jIANll5UkE272w+9I5Ysc6XODhJAooCCQS6Qv0KyRwx/bBqsFTp8sRHBbqkPIF1/nuZ45tDpMgJ4ZySZlSsjTq3AJMs1nZulpZnTwiqM/PEFnZS0+L8dB350bvocgrkfv1ubLNQWCU3YWIa9iNPaz2Ft/d2laYpkgYNWqraLZs6H9WqRJelbiINOJbkVNdO63+MJ5QK6R7VbUSGLvDnqybUEi3ZcHKxRZ0uPoDEpvM+Rdg/wxQ467aOprAulY31gSJxNCRaqneTWpSrAQRSUDnhqYETsahcUMOIbuEMjyqoYh6RbvaVYtJvVEeh1NnjDicnfVLT2f4cNWrB6ujNJ32N8GksuEaGvcO6NDQpC/w3W6M1En/DhDt0r/EoLwqMoW6yzOW2QxUOgQmxFsJbgsgJxi9WGMBxIm231h2QBEcTis7ie70aopKgSQkVOpKTSUDMbLydBbXXobljOpVlRRrJo4yOJT/nJvsDhCPaIkbUh3EXLnK35Tpgks' $BG_Image &= 'wQeSlDWzkO/ntFkSSmeJfp3rvherN20YYFahYQvhkyWHWlM95cj7REe0GZC1DCXOJNHYkiiUrZUpRjt1VLrxtJ3IuJ0g6bxHaJK2WKHItxRN3fhzlAkABuJWEVUsLxJDr8UF35hDQEBlGZLRU1MsZfsgxz9iFwQj3d1nQjvU4D4KAZNxgm49s9WKnggzzqzZz/LT6OSzmCPFKkp6pmfEa491HM9NrI/1SBx9zhEhPt4q/WsKbo+Vy04GWqhFEgfROASQCOoK9PsIGosAhSJMiTJRGPcVYLfuTKWa5lreZgl+rQG4PpsxymwQX+1uX6F3gW42BQIUA9S2hlXFkvZYoVv/HMl3z2honz2X7RUVOefzHn2LkO+IEx4oSMKeoVinjVaZJol4nMsIy6sFECJXgokkpicWbB/oIAhkWQFSNilqcAam+/1SI93fIzSQXZRy1+eNJKZFJP2mSZ7CBByX/ajyAN6iP6OD59HHsWIiSTd5JSv61+dssP58XU3IPfigig45lJmRkIB8Sa0TJaoUS6EB3u4RRDcLyXcn2hJkLighzuCcHf8wSyCTqUeSqJO4awkjnbdP2oclzO0wJJ5exYY0ZLBeL4f5R94c5kTbgDxcMGUN4m1WJuhcREKOLxEhtxPrQBUJqcnFEM1MKTHwzXOayYAKItIzqbAhW5BOEso2j0peoRsa+Q5o3VFTqaNK861Vrh5CSCFCJDtCniCVifAnmgsaE1i0BRmSpZj9OCJB9o5YXqzVjuN78hVv/ENYorfA0RrJP7T1iArZ/LzmT70OOqFFoXcvlmPovlRjOogA0krXKgkNmja9NEkDMm+8mrqQDh9iEvQ8pb6PMnnG0/XMA5p/1zJLqpIZQhbhz0zrxUcyentGpve+rwpBzsH0W4R8B0FQjng0q8jS60TWVi01N+Kx8u2s10uELQhJCC1u8worc9n8VzjZHFKTerJ4IZNlT2ektma90R8hzGlM9CAdSnMTQota5KAtx3Lz' $BG_Image &= 'ClEwFiHH0UnJ6iHGeHlnkxX8+bJ8xdvLa4KwsbZYlQmFVcXXQYXieHrXIfxIElbBxqQAcPFCgkBrdC+7tQOSyRMhQlBQwxCwV1ENBYYT2Knhm1e6XNpLTGbwKEvFZTks0s0UhVcepNN9rCZacWN5Vk6Kpo6zAfkSlX47sf7YgoDqjgXx7ipdDGpVo8ZoyGuAUSS7So8EMWxH3LDBv+fUEhRTwS4mT57LfMRm+OWf+Y1kSPq6YjeM6UnXMT5rk0eVVIZEzqqlff7OYX/v1KabDk5yH/vh15kjdzrWN5RLgSCbDbwIYoqIwwjRF0VSGP2RLvCjbxWkKN1mIWWFVSxrECxT4KO7qpsgUse3pekeNxzpUEVJeJcaoYpvnZMY0+p3SGYG0/GcokKQJdI5Vsr06ON5HMO1KUzvx9P9GhIqvNhi9S1CvsHLW+BC3Fik5NtFmjUqYjRIdmBRI7EeWAaEhJYNYQji+9CyBNkxQRjvb8R9GptkKEKejwV5Z0Xcu+GG3wpPRPhKghQXRBkUvbZIeu/7sKoKM0ja7bGe2WSdJ0G7888tQr7DywszRGAvCxI7UfQVq7K/mp8tSjgEyc1FBXq/pGprkBcWN/YiKSIhE7Tize0ZPSWTIAQ5xUDUGmIYIckG6a0LxCTNBIqft4C3blpJNLEksQmxk3fYYeX+/NJxt3cuLwkRPXlXpIhSvFihCnwlgaSC0KVlFBosJAQYgthQSIHXI1UaSAzFZIB2jW4uLIQ0sRDDGMWcBOiGMrcEkE4EIVXyqhwfSRPrdiTdGA1ihrRPjxyMY0mQ5x0q/Hj8ccyOAnmwqphQiFdUwTv0GJZYkFJcWbWrdYQb6f3z+iXBeKV6NyMgVoI8KBDOLik1CLMoNiQHqIHO/VTeaozUc2eTYB9xc/2JRIkhiBiGCNBmQnzwna0Z6QwoTN1t8CdTC2+V/vlOrKMKfBPjRcH02ALqtUU8qqUtAR4cYgQs7B7gGieWfcnQppgbSGBk' $BG_Image &= 'EQ4y4sACslRCHEjS+hgPYahksuRbnX2ZkVW9WxAvCoI/cWgx5mMihsfj2X/ZYY7EfnxnJOR2YiXXXYRNiHlhtvhkbUIFJLaseIQgfDuUIkksfy3bhVZPhmQsioJIEwUrtNfoN8fvuXfc9Fzc/FBKz4cOfwKyBtJGkZAjRmQPi6QA92w8Qo4vIsidqmiGoNmUOVE0lE2WykJkT+R1EMEmxXcCzsu2giaIN1qJ/tUsAL7TIsthwZSVBAkTKqGReVLy+lwPIkFnkCGIKG7LMT8Og6S+0Bepk3LmYoxIEBy3Sv9w/HPUwUGjWMUCgy2TN6QZHQJJ4E6KoN8JMx0bknNCgk6FR+VDxucbnZHdUk3pBpS6EItu9yQ9CfWJ9Glu+P0w5MqAcOhCR0Btk1Jwu9jxPCw6jNWXd59WuPdY/PMd86DvRBMWMSKkEglxwNAEGY9WKe5dshBSiJWlAqa6CkRNGEQF0hSZaCIpYjceHQliuHgkWSfDgCSO+GdGUmG9HSR4rjM/VIN9be7vw3j2GdKPww3jenl4H/8CN0E+vpzwhyuvENTIDS6eZOETxY0SsSbbEIRS6wI9BemFoQQKVdPN2h/bm3DXINdEY6FdvY71JpRGDuYMOrZnb++Ds6Ez5w1V1lRBMSH7IAQH1dOxdxvpecGM7xAhN0EIHhwVQlbBZGCpVqBZpWh0USLi7kVKR9Kg/cqM9CIICoYZAtiztUuQN2rkZ0rYOT1/3ZMx5mNjCOQ7iaHnhOwJN5TBYsgC896fNtoj/RuO43UKHm77c4mfO1/x4zU6UGp7sdjYLUiN9KgoEE0bh0y29T1Sge9p8npHg1RNtju66Vk6fXQRHD9vQL6HPERMBQdhSHPH8RBFhu9j2Z69F952LF+oqxBkTMgkZG1Fu3FkPfo4XkkmneFsxkW51JfMg74TTY5CEUKbBBViiEUHB7e7e2G6slxcQZ1LcdtLu3khEklexMS3C+gr925vJIEIOApOupwKPa7f' $BG_Image &= 'dMuaZSpGlK6k0r7JIhVzxz2Z10XpZP7a2DuQHuu8m5DfHb0/twj5dCfWil8TJOPGUb2XSpVvJIs3nFC4grd+WWMTetPoBdTEyfvRvvXCHjq5hollCFpXGtOx2p0Ihdd5T2cMZEKY1UX1RpDEewxKexQkHHntr47nGbEawZ+w5E7o/fQ4+lEUG80wBCxmV25qTHiAojaaUCjCN5PSG+TWhEG6MLN6uqpkipDY/vBsgFqieqgxNYmwMlfI4F8gkZBodL/rZcfCUYOdIIZIKX+Smbc2HX8ZcjxiRiZZ8dgZkvXPx6v0ezQIxlSAiBdLRVmGeGU+cEiRDVYtVWI2IOLkomKQBYCTxo4qPBqrVAscQhhZcJYQiEm/wlDBPxkhYroAbXLkOx4R8hyfdM1nx4TYq520LCmF7Ulx7+fjWL2wJpweigQdG/IlIuSOo6MoYQZLzTeEosokUTExkBSlcxab7i2JSPyioAWKqIK9ugSRGWvt2PrJ+ERBZE3L8yYkGA0Ji3+tHs4kVBIVoQxn26jHCicZC1IxIaXQy8hEtmyxdgmSjN5BDMjPTZCPb/kDSosdsSBmB8IQJhdrWJLuo4hrS/kNd8waea7U66D0HAWZKnQFMRw7V2D4zLYlEtI8LjoEQjITtbe1zvK9012nDt0mZMHk78AW5GU3zJC0sV64CIP4+PPZCb23RucBB8a8yxqGxNGb744PCXsIk5uVcCG5VxcaIQhq2rs78FGEIN8FKpzwIYtzn61odKbhL5RSwq2b6IkhqUPcm2CV16aF7QdNlvVOZ5ZhXsffRJOYkE5XkxOOkOSuKvxoPH4A6mRBEjW38eBWpU5TqRZDsOQKRWTgFKkNFLSoAVSNJakIb1ZSQBLEeG4EaZm9JYDaooVtPd5RHFBjLwcJQ3wOiyTOFotDkNSCDEMSbHw+JqDiMtvHX4X+iOVIu/fjZD/+zBarb4J8chy9QPIYDb5/Ryxax8nrVaprE0woTR1HxXCkgKRp' $BG_Image &= 'AWF3VUG1MOGQiW5wdW6AwhPtoFpXwAh3B8qB5OxuBDNJoGEKWHBsZ88voaRaEMlh2OpA9zRFkt37PFxxa6S54k4S0+SjRcit0ScRygeC+YKoos79kqkxNOEiVcVk+In9ZZCEu00NAxcvZB0iEquKvafzT9DauAGd0IgnV8mI78ZSInlny38XQXB5IBS3hF8GawjSM2vKh+OVbTIbreM5WAL9eMZ6/PmKfMVbozec2n5O3eOSHWVyzAGF0qY3iqHCRhL6ilmhVFUyXot2nRSnvZz9W4sg4cfmjYp435Em1t3R5xIEZNRnaNKZe0iQVcs8pumPXr+BCZJ8lcdqaOLV0+xYBsSHX7qP/nx0qPDW6E6tbWZblLAZGAPCstyYzgYUxk/63s0kCN/mfpkgTExPGBDMHJH0xhK3nVZ0dwAF5oemRbY6Bbgj2DvXrn0vbFqrDK+5r3dHca+uiivb3cbjeI3zNLZGvffA9C/CH2CZEILaIgFk/her5L3Pc4q7Si4kYYji1SaA0/22sHunkEY/aDNETK4v0QwFOocr9MYBqbO9sjyJAfGl5Q4Kyy7abmyk0MmA9DkSYoIsUT6deS8rb//k+HMT5IM1OoBku4cfSf5WaQXTc4+MD4gsIqXpKrVIbkmLA07sOpMGluHoLjulhGU9WsuSKE2qbU1wMW16Sj/2OepSC5MMGSME2xhNJJ9ktlVXmDDi0wzcCgstQI7j79Hu3rDkTI7PFyE3QZ5I07hSvTf5MDmoWBGRnFfNBGgm6hYdI8aE+Ja9WHv8j9MMbmYjyNaE+R7/WyQDJcPW0Mpcg+ziEkwfg+VaX6o0zjmDuwFRcU8HHqRGas0HOY5HLMjrzgl/PpwgtxPLOyx0j7iuQXYhetttgZDEEpYRSb8gvIfPfeJQh5WvHB05bKT6Sct8FBsrwh4WnBHy9PQqacOEkFMhU587NR3LOBWJApFKydJZgxhLOnUSspZGf66Zno/HcVijD3ovRt9XPx+v' $BG_Image &= '0u+uo02hZDsxsJA1MTjivLZR6V5WIvDbHLO0z1oc4dIgAVCW44DUhS5rbBKoQl/m9naut8sECtFCTxKLodbWswEmJQiUSVqqOtnMDWFITIh1+st0/P19hCLp7X6Nn7uq8GM1emGreIXICjwGgTEgS40kGHIuD+GmEXKA0p9NASXCEHpWEgZsSROYvyRLxH6m1NqJZUuRenVExQsBAUrxPQQ7V/YaybNQf/y1IP7Zim77eJ4D6cFNkM+eDEJSaasYiBM+I8WR67EgE3mXlAm4C1YoZLRJCBIAsg1ZgXQMmO69Yvhw2WsrGgTqLCHBV2ZLxYgAQ0tmn0hSvxiQ+LHCkMyXes70zsNjdPaMrFO+yeer9NuJRTS7CYYgATWOHntElXxecWFEeSwD01BxT0VZIj0oCBmWM0pdYqiiTs6tD70NWtgBUwO9jWwDtgkKLW1CBPRB+e+9MiC7CdmbPqQ5lr1Yj8O8SD7vM/wIRT5chNzzny1BorVrR0aD2JqYIDBLsr9av8x+Kp2AokFUJgilFmwEakKUkEDwbUShTuB2HooaLm0PqRoI7BBz65Mn4Kc0FFFSB4Ks94x3SL3P85z+7sfDQt2WYxsRcuHt/dRQ4a3R67BvlYpdqCBFdg6DW6izCDNmtETRMEtiRuocBqn92p4qVLJ5SwJIB0G6z+0aW2FhBE4PQcyUyI1N0BBsWaH305bGlFLIVteIAVEMiGJBnsuCmBrGw+YkOCJEPlmE3A0brEGOqO26IEjCBbYyxQI17tIkMpKxH0Vh4weVMEi6oDg6KBGmygLVQAHhRpCmdTvcQzHbqVgfL/25oyOe+9QpM87teAOe0xUF4K02ferTlwV5tQB6nBKxbhHyPfhTGcoRl1TtUHH9TL0dmRYNEewCt71PzpWZIfMBStM5JghCjg1hRHoVlNKSFnVhP6g0rkZm4/TspDrFVSt86I3W60JuGTSEriuQ8hGmxsYQT5c6XtnuzyNGJIbDfPA5NuQW' $BG_Image &= 'IZ/pxMJhRRDzwbMJUU3VVLo7K1qZth5zXSlT37/HZ41ep64lyLSqOrWcE6+FCGniSJ03oM4OCtYi5GT6Jh4iteV8K0UmbwazgpUeBsWJFbzo0Q8XhfQapGOK+BjjkfVNkI8kyFFOnWVnx11BTIhfdmZRlUk7Kbm1yPCmZgyIC913gnAYExA6I28XteuYU1heOmPrtohQBUrColbOyUzEDbgzJKtQRGmtJVfd2ovl7dWxIoTTuMFT2YK9LuS4VfpnxtEdETCUuFlA38qEkOT0atPlXtS+wzJrBN97F+lc71CgEHtxYV+ogCFUVPtZjRiyKDF6EUQNpHlDCOLTb5FCb/mUZKxMCDnMkb8avXvlYb3OXydCbo1+LPXQTMXtpQnRWlnXngjCsCRskMT8hB9viIERzzxgbEie6ao8F/T2qyR2WYTbfkjwlfbCqU4jIGWPdQaKVUgf01gfC/Rn92qL5VOSeuPmDTOCmyAfOBkEI69X1atUJ9DEGJosQiD1I4p84BbXw9adNGNpdF3vVBtFmPf3WONe6K4rZG40CKgzyBZmCGI7ZnAhnk+lFcovoUKgGJO06JEBbH0cHpO+/Y4NeZ77xn2sSr/j6LYgpJYJScp3YHbQ57i6qPLFCo8Q70FuVkS3MimTVJIYK4/nwCxDmLAjB5yaOHSuAfjQkenJzGrr85R1hCsmiK5NCFiEMAPWYQVyPPNycfpLevRjeXr7Ikz4oSLkjqM/gFgQltbX/cSPNP7xa5VKwVxBKTH4wdAgN2ELglxKljOh1Ipe5BClHjWDzVgwq5x7ckwmEt+ZSNXYnrLSHkh6tiTVJWyPIMV6PH1wronTst77mhj9LbMK744mB7AV7V2qkKj0VRlCP+XHiViVsMMohCvFdw1SNEE2CogePmAylIw88kaKChMrJJkw/ORZJb7nW92w0dhtR+LjlwTBGslLTan7M+m8bqxoijgIYlwpdFuQn49U6bcTa9JafTzn8xpiVbLetx45' $BG_Image &= 'flglv8bFVNuBc3OPg0TUz4Bc6RQ1QWUOVHj7C6wjQhAByghcGxMRPckncUjNWfKJlxqkKsOserWQ6ziyHq84yOPvyhLEG6yYj4uExZsgn6fRj+SHpP5pEDimHDUiyCYjL4Vd8T2pYgJOXiwnARaKCl+CXO6sOee9g+ZVrx8DmV3YyBrwyyW5IUQk+9Mn4VqEWKULrivZ8OjDw6CTy+tFJPrJgnyoSr8ng0QX9Bb5Y12oECWgvolzeUmleVxysHzMeAQTZEXb/RtlHiaU7coAWeWxIOuQxERYGbwIY0wRoiEpba1DEGsSQdcapJxNqRnJs029PY50OAlBoj/6bEI+MqH3dmIdzjTJHouR6EHa4fjMzJmRF6GMyFijHM0I1QTSGSuSMivOkxR83vQMLtJMcm1mxIKgQaKLTKdRIVsukNw8tsrhKQnNaxUCB9PzuDaG9GPmsSVd8fg9TviZUxDurqP7l5r+OXPE9FCa5HCZjqk0lDBxwn3XtAcP9y1Wd6b3S8OI5PkGYQH8eQi5dp70PiPBRJhjd5xavdmSveP7eqGBX/ZYUf5St55PdVxZx9GP7m2M52Pz9F5S5CbIp2n0nwNYlSBthiQOcuHpVZkTKJEJZ6BKnFhhvLSo8UVRCRSKWiJgPft8Lh+wsrdiDvDRV6dSKSgIPRoZDkqIGgVCq3UMJExi1bMlV60D9StDJt9xm5gus+TRDx+XC8utfy4aWH9oLP2eDIID0AqDgFoinXWGUhti7bHIIQ5fSEKUtFskOFySZlsq7qEMV2gwxqP2idLcaWIwi9iloFPX7sMwIsJ98SbjETqYcvVLekSCRN6/CZEYkN5KQvrCenxi2e2NnzixBCJltFciZCrvNA2tpVoMSW8GIuSoqRmpKIwqBd1y8EH9FlBM9H1dEwwxCuLcu1Tro9Mpk4PrWuaEIDMEq9GVokSez5iQC4aQaT4nm4/J6D28r5oaw+HGM+yICfH5HhPyYRr95zhq2Y0MQGCp' $BG_Image &= 'eGlAxrioaB7FKSVuApyzKO11Tinxtq5OahYhYt6hkpw1sfp8SLrJa4e//j0JvASbMR/uBdSJsCP7JailZ2S3y6euI4UAT02GUjt1eBybm7wfj55AoU9hSShyl91+mEb/OVY+uESgxGHIlQjJGITyj3xpgIqnl+uoOduU2BAZ7bBhKyaGu/LOOozjrv3XEqANhiAYiYW0HP72LTI7L0LvMt0nB1cGQTxq/Ta+bZVMHX8Pf/nhypCHBYitSJCikA9U6bdGr8hWRoJcb7K0ebHyQ1E0pFmL1EaOEsEE37eUkdbABItLeLCtwKT2JsCeAaDxMolor8KWXZ2LBP1GguqZ8ty4jJCG1Op9qLRxvPIU27mKI0HcbfEbSkLuHdZ//4Br1z5f0Qx+PiFT060/aoT51tC6hmDrY7Crak0tbxJ8M688lMrJXNuTHi9zToYameYJQiIwOSbYZnwKBiECgJ1SihiRoCsDsjM2dmc1beiHT89dpD9PUXSfwpGbIB8VRwfK+3YRVuhpM3pGOrwrVYXJ813mR4l7wEQb7AksUiIgy6BQcyJzg+BFNvwbi9KpHaB255XlCGS1rrRq3NpESC3t5SEtXVoQJt7iYw9CkWebHJkydYFQ5rjdWJ+D//o5DrzACTKz/BsEafMcqoQlDhdqswMR18MAnrtBUItNUeAopSOjDdGbOFGQfwYbiFiLZsyHCRPz8lrVutNtqbLVqbOCKK6SwpDudci4qZiPx/pJskko4dNaHXeyyUdpdBwEqKZEzaGuHb0yM1gxIGTJNgRbB9Kr3dKSNaxAAzKPCYVt25WNVU5GKDP2AgEhavFE8GJ7gAj2Xg7pecIr3wSViH0IZYQhI0B8+N1+fNi89FujmyAQmxa/U0lexmVZYWlzZ8F3RVaZCYianvaKqlJE+oLfUphUiZBX+ZIhgg958r33z4Q7SLSiRQTJHJgIYVIWORfybxtq2YKcsXdXDJciQ15YqVieb7si6X1dFHI8bz/v' $BG_Image &= 'JxWDFIhC8zBDKBq6JoiJMbMLqdIyI/EtOTiiU+8GStwb354FN63nC5EaaUPXo+nzsEKr2ARhUYHoVrPTpbfNkm7lORRKaXgixTFVZxFiyiP96U7tfwxP8jz+kmM4Enqco4Wf5ca68efnAA6KKxFLSluT6z0Ws9cauhjKanEsvX6Q6GMK0pWjYWYK60Eh2yujFFBZlARy/FfEHKUtVVGdriZwHH3nlCS4F5BMIamuQBn9Potnea5Om6w+TT8IN7K8CfJJTiyWFfqRrp7pPXpFkH2ajjaGFEr+USpwJfIUWVESe/e+jEMh+mYUf/R77a4thjFEpkcrNEGhuzE5V2gDhuyyQy/zEZK43EOX0R8Fe5Gu4WqQMCQaPSmLEek53m6sjyHIATd2P5pNCem4W5cqPZFCG4/Flkh20N9fJmQomQgJwW3iIQypsNLvCAq9zA1/dNgUm1IJ+6WXu9qLZTEynlBo9bpnNkjmSEOttH6/rIOhxiksJZye7g3PDj38Ssr7CR/YoPcuBqFDa82DVAYNXg9GphmSOTrLJTwpvic31m6RitLGjxadzVWp8tgn7iCGJpzZwEQOUSK4An9yUF1tUsREJBromzYh2tPiG53cLPE6lE4ZNh4RIhkKbduRs7PfzxLdvz93658P0ugHAIrdb3ui0OMdrJgW5YIlv5MPeAvvMTeszRnhXvRFxcyEUuGGacNcnsKJKBA6B0LWCzOYrVsxFW1i2PSYjWZKE79qELJqL806V4Z0L2JYkLwUevgRknzkqMJ7MohlLfs4KCqx8N8Yoqp9dnLiIT6LIjaGbJ/oD/QbMQy1LgrkViaYh97jhkqgvsIYFAhQocgYBxsSRX57e6WNJGgnEQhq+T1Iuuy6Ssb2qecQA5JNVkbdJl540umfRZAbD8fRmyQ7X0iaAkFAMVm8s+EyTVIukhh4FIiKopwlb0LMgX4j9zJJfY8dokIWKNQZHqJMi1YIAnGshxoOgiS6B2GEu7iNKmzi' $BG_Image &= '10BIrKN6Z8jTq63g9vFs5ywuExJivB+P28/7QeNt0yXBYZCK8L62IEkwkUZ1lFaYUL5bWFunzL+x74oT/6iaWP2pzWiFnuPl2iIg5DZgIWF4UAHFvfGP1CbOTLeFZHXuI4FmCtczL+TMkERFY0A6+e7pGfT0SJ2M9nQ+b+pCTky5CfI51VLLqTOJfUJsyC8mZBtRlqi6yVEqKCrE6GlhXdTix6hwmETY92FCWEPMu8nkkrQf/O8GPYRBD0lavmipzQxbFchHgQ1N2N3ska7TB0gF5wYnliBu3uCp0Isdz6tQ+vFB+by3E4sAxy0qZS5OXRNkLIZqMUjUlu6eVie7jjC4EyT2QUgoJFF3yijfLxuNaBC/9SusLhRWADJTlner2wei0eERjDYZr3XXbkEybmTBocJVlm6C/HkcI9SDGJDbz/tBXUeT7sq99umaH2mMFcsxZCLLLIkP1ncWSiR3gqxDvbVmyH1qzlQa0qVQUVq2BmHfRpCxEw3EhZV91CSsj/JotIReZSTXW6zERhU7pWU9vFzl6A+rdTPkiAE5UcMzo28/76c4sZgoNGdnZfyiQWxCVruGcMKLaNlMS3/7ppthpIJS9LfpQWzREx+ynEWZRyR2j3D6tsPwd32f6Skpk3AnjOg92J7LJZFXcZB9j7X3LlWC6f1cue6e/Hz8OazTk4cVV9YHtXi/M7FgEGDkR0zIFZjfzGozZ1Dzd1taYcT3EIQhRwgwij5UYEwM9u0YtRYonWB6QI6Px4S0MNmKshFZDEr1B9JDbnilupo+55eMXi1RtPEj9YVjQDy38FKD/Ln9vB/jxBrzIQD/nz2WSowCSeUUYfmepCsmdz0kUDRIkOySHEytvfg8j/n93dNL1kmkR4RQLTXWDkrecDW8hqBeT0R6AGZLmLxD9tPFfMDWIwhLzJHlw7puYv1R3RVvJ9YPlGpCmwAffzMgTDWIalxTJkWBJGsPqE9Ab/NiKbJ97kkp/cgXkdMLCwm5' $BG_Image &= 'x188TFFw8mJBPflXkIStobvfMEu6TRjQ8kT2bl1KEJr9MSDOx4ozy9o8QqRf/EjZ1K5AvDg+iCB3W96kuFKALUBigFfwbiiDEKTK09EvqQiBz1S0r4oaMJYjBiN2ZA+HCFJAIj3k1NrRLcXn0FgsiGKY0ii02nzAOggaukisC1AMQ4S9dipIl3erkOXo7VlFgfhw+3k/pJwQgHqq7Bj5wN9Vurg1xDJjXpdigbVsiWpr9m7NMH9uQNx6jYKWIPCnjyVJ4opZZAnNvCUFoRuEvX81ItynHbDQFiiabHcnainjdXTtxIrVEpKteCq9dbJiOxJy7t5g++EwyU2Qz8A/WKBgfhD8dyKdpfKbjPCo9WNWEIQDI5xAR7rGSa3skcCiwFpWhoYv/UAlW7G2asftbyScJUg7TJ7adNsLH0wRG4yYDiiJKo7gXFWlhx5L1AiSWicLsuBs96t0rDEidyDkE/AnQXRBgFg0TINrLDqUfFQlfEjWMh1Qgs8hyJ7tnrIsmBhSLWtSp1IRFZTdmmrX835P2rdavfZWgXW6t1XdouMidu+mBnf39FK8GB30HkyHP2ST6s/xYrku/WluHE5bNDOSqnh8UKTw9vJyqrSn7ai/5Y6K/zsTYhokv1fTyJqU78RWzMfx1J69fJkseRMkSb+SP+zU+WS7WOhtMe3jOhurFQ7ZG50kPcu3U5AoXVjOGNQ3DaJO+dSWjOVoyEaQswH5X6IcN0E+ZLZU0r4FWhiMNCjVb+DKAPeiSMnqO7yIq9e39jhh+k5b9m5SPOOkNdf7HGmGVL6x903ZEfUhKOUggq3EXlSodYN+RzB+LZiSuZxtXLrOPXN+73DSx0UgJIubIB8xIP3nzYMlBiL1qwhhck2iOpjNl0qMFYmkToqTBqAYqJLkaAIxv3wPpNfWTC4kkgLEh0UoMj2SvX02U+Z22vkKuoyk/8VGxvSMb/lkfmzkMDWeFwbE57t33Kd4eTc3bwb7M5uo35BsRcv0' $BG_Image &= 'iBBuZYbzXpI0KhrEaqLEhN8lG5e0rDM9SMy4kPKLMSQhBrWjG7EiNhs9VoNQw6SIAOHku7MFkC3x2mg6x3/Q7W1a0t9Tn57Kwteowr+XYUcOH9I77vbyCockUngrlaUohzouIZ9GqFMsk4rzZ8kueQuCmyCQTBILFFm5bP86SggFqIASwUUjeinlMLCdWIzHZIYATNouAXoV74TFOwGEyjto+yeBQrK+0oc0MEcefxu+x4mVeOEu1f/cBPkULy+FfPuU7VWqza9AJZN3OXjycNqRUtwgMRaEWsAU7b5+pxgq+y2zoSDDFN40v/xzhu3H7KUa3blU6m7hd0OSBsbw2FwFgWwxFU9AD0WCVS71ysNyScjftXGmyE2QT8CfAwelRlq2zSznRYJrUHsDB9VsroZUZF6UmRINksbvlCzIx/KIomJYahfgOzem/U5kidGndHcnmQwvWlpaPGID4/ACO2Rp6DrVxGdq0E3vsl7rdxvyePylh03IyX7kdBPkU5xYB6XE7kanj8T4NZ9Xfu0VuKXKZJ0JqW+QuGW711BnwihzK8oiO6jcmFcl2B/ibFiSYlV6TOC8G/Cr1SaJS9UJjRDhMj0Xfl7tRVOGsyDhs5TuPy/n1ULcvUE2WHc676cQZO0tOsMHSiRKiRRegZHppCYTy+QaymjSxP1Z52ReijJnhhil6Jb4qfaUeGQVwkSnQAMKhJH+WMvZq0lNbABc1BCB+RNJk9B8ZUNoIgftiqvT0Nulzp23OD8XBuQmyGd0VcQhqPfhNatViP6lG8vJV5l8m5wT/xHTw0HFyscOQXy59dztVu1TRcRYjyj3zBlpC+rhQ47IzMJ1hRYITFlUytFbkvWJuI8MGbVyPZ3RADVI/YiksGNef+H+Jn2Rz/tB+e63lxcUlK7sVIrL9esWK1sr8yTWZJkSVYYiYJRICJKJhinMc6URqFgW7vobeZ4yQiFRF8hXXRkbova2Sr3kutB+MS2uDV7HQTQ2RBQU' $BG_Image &= 'xbNaN6Z3g4YmLpwyIkL2VKzPqJi6vbxYwY/G3gQRIpPN+7tK3xS5Mh2EjN/XCEMqBFHQkT9lta4Qg7Nkwh5zkbcvgbQUJSEM5IAI1ELkgxPRksNLAF3S9WStMY2JgkB6ryuUbYfLb21GLgrTP2fS7U2QRh1sQkamDubb/xvMitmY+1kTIbVTsTMJkmQENKkW1YkZMl6qrMwXhiI1hxAmAuU3gJBIYA+vA6S/yyrE3QVnnJBoiRc1tz7siS1AZo5oTEgyTuznfR7ZY0Wg24R8CkFuL2+S+DL8v0YJ/Ot0RcsOkjI/FErYqsQZBguT4ZsgbH2g88XPlHVKSD26DdPwQ2Gygn97CaHDD9sWtcalhV5vN2eHFY2+I4YylgxGAybGwnMaADlC6N9gU+p367jPmG8b7/+WCJgAx682RMw8z4zUYSkSZOOKuSMyjUc5Ul0t+4pPW6q0b/CtdTGv08roK3r0EERxxwLwZW9teom3QAjF3yejiArzGlI2b8+OBLFCn9x357cHY0FugnyAl/c4juX+3ChCi2uZIlfIlMJMi5avTIgJHKowdIkBgVKarm4NOWJU+N42LkSZV2TKNfpKkyQncUqjmD5yyHecbZZQFK9DheR0b5C55T/tlZOVXosZfrByTXY3b1T6TZAPcGIlgrxkCAc2B//azbuZicWAUpouqsIVcCX4JtNEqZuqzD8IDXYdUhxzQ5w0Oq+JkSvkFl6Ie0utWsVTWPxJLgoBWEP9QpC9TmXp+0UP9SBerKXS+xmCxIB8CEFuJ9bBRubGSNOAmuFKXSMVh/6KVwbZlkabgKFa+V0mkM4kyF4MK9wk+1Lam4fLi8QGr9Fv5xEKtiTt4CGqW8IMaiO7JU1KM3nJD1NkCJr2W4T2YLqPRozIyYx8BkFughyWpRCaEn2Rlj22DdfgeD5T85QmDsqOatR7biRQWIOdG6fcEZ7akELXuLYgympreqVWTMZssFYMRJ04yKXhTG1Ymaacj/Qf' $BG_Image &= 'p8QwFuRFkotcrPzeBPkIJ1ZzZbAikeLaEtivEepwrWdA+lCm9g7XFr2nCYV1HjZlrlQ4osouy4Q9+YHFyfBF0s99uGoEZEK0GpyeWHIoXalBtFxvScXfmhIbJrCVPrhydaZsSpbpV8Zj32TdBPmM+bagJCWETEqKU1b1K1jaq6qUJg5E5n4wRkji1ty9W1cgU2ArI0tCFy19w5SFXq9U+nkJwKfp817J5rU8MV0kFASqxEt2iF6JpNkk+O9sRQzZeKwWWUf6m7zhJsintB3lXoqtqSSf8+Rb/dpf8dTsx5SRtXmtj9LIjvBDfeZFVhmTY57GsuSQ9RmZYI40rZ5lYuXomV/YoIAIeAiyHRB0rdLTumEGsdO0SCvszg7LIsShQo9AiBkJboJ8SscGNaSxJFwQY0WuYVduTIgiYe3nGevhZVHpAZFMjYDCLEQHQUCvZhdlLOLw3BboLDtSa7sPhPa99DRpJNUdABEhv1of6TeCqBZD6D+LERqzpU2n9zHxwpiRDxLpt5f3BzgkKf2gtHUiUf1OkaiP3YCEXeXjMkQatixkIzTO25NF6FSwx4iEPu8xkd8xcQm1OgRAjEi30CPaiZgRqQmoyF+NJlerO4CM8THnZncns+NlPzo93j9xi3Xn8v7MmBmk3W2UgxzF+A0qJSaYvmo+mWE+ixmDW4akjSGkTuh4syCh/FTowVgW5RC0lO99L2mhzHawDBekuHR9A8Bb+julX/6HYKc2KsW5tlFpjb3B5SDu0Ds4bD4+yYLcubzQfH2yeaGKir64xp54ZYoYqowOZCBV2EYZPfxgSLJXgWjMR5LdQ5O8vZ44A5nuDK0XYUI0ZMviR1qxKwLVwuzgfvPxklUg/DKpIKTAMCJklab/rUnvMOQzLchNENmApCCEA8WR9duYkIQ9itlZ+RK5kQbWZSiIkze1IJjG12POLtTGIs3vgNmQabbCgjSFtxbjU4+7EDH/e98fG0IAtfTL2CEXLb6Xp3va' $BG_Image &= '7Ro4dYxKjwq5kxU/oS/vcSi7jHQwNJYC/wW7AQkVNmKRkR5T68E9DBJCpPlV5HixIPoiY6BDkbh2O2nwg5YxRYRTfS7QlDAhlPwaIEd50Si06hreS6JYAJlB0ukEkQZc0x3r8MDbEeobOz4lm/ceLnX4GyQQSirvCGz9rkFmF+YXyWKoolgTMEGV7NaUBokOpewB8306znJlpWXchBELixTxadGnAHQKCZNN0pmh1UoW77oOgxxTXx/5Wy9JUNNqj/4zQv7R6gP8TDDdm6wkY234DAtye3kPQHsgxD9mSjqVXIHk3qJ3ESVFVGdI+STqDcTenmFO9MvveL0DegPfGYKuZSsyhlD+8rf5sbWqbiGlT+PkEnVtM20ILUJG+E9herZwS4Xo2R4U8teK9HlIyIc0bbgL0n+A6HRqhtcwPW7qVyz7MrnuoZNIryNJwrdYkHRdVMgQiky5lheiQL7RghHqq71C1EwACmhqJngkXarXuiVbFft7IShRki5JdQ2K3mCBtPVw0jyBxCC3Bg7Hq8eiJxX2/zUgd0XhB6QqopFNRrQAJarSwucKSkKW1qHemaHU31Z2WXt6YjRFNkpzeMG3t2cUJuVvxbk/zxsJe7Raa5bUNOYVUv4HGxf0sjSYhu+6yvNnZs6hCNQyIDFFmEr3FU+3BVkavV1b+M6Q24J8AEEO9AS6AAY2ByPUL8EMJax9HtsiFkpYs0IUrbKghT1v90QCTAgl3/88sruGUx0cVocgUqdFdQaBDDkmQKhOyaE2qa3LSGE65AlVJmAhHNlcYA2ozbrj+fdnBrGdc03uzoofMCH9wAIxu5NCaZuAfg0m24TKd6cYpC2KkJhKNIjChSmbYq59IFI5KBuhyXfcnyyUny5tHUmXLpAjFLYgktLQREIK0s0dtWaLJEIpXTmBy3ICLABNcs9ToUVN6gr33iad9oobboJ8QEH6EQUCKgVTqPh59bsXi4kSKhRRWDIjBLEW+aST5i7una+o' $BG_Image &= 'ikL3TwxMykzSXS5gusptiTOZtDnTCdXp9SbfNTm835JfQkuXqVgxk1he3tev/ErK/PtIz+N4WoOc+PEx3d3vtqOAEmwmSUjeXSVt5HcbklEg2UnFv5s5tBWNvicr7vLcd/INj3wXCTvAxMxmsOUo2zlTJ3IleSqNbk40EEtv+Hp2XBiz0sk74forGyhdy64yPyLS2UAEvm3UKJHn4RCh54X0Fib8EAtyD5c66K0zCRQ46R3QVuFRvyDiPK1MVIkRIj3d5cjanq4Y5THYcxMpMYTxFk0llZWNqSaDOUg1ViT3WkEuV+Rwgu29Lld0fUXVaZF+BZX3jMUYOTSghF40cZVkLL5keqjx/CgNcnt5D6IlDERNbqFU/vkVe8WtTUjJIp0LykI0mQwFe/+SBP4Sd4dKog95OE/ThBKvO2V1jt0+ucl7ooMuuhXgg6Ru0BfXDEk+5m6y0g5mEiS1NbF295+0WPw4DXI7sWg/b+ZpiBnkn0zd35DQoJ/NMJ2dHpb7KaIypDNDsOT10Mnhhmh0FaZGXms1lgeSiOv8LMsM241ZqregSGccW/vevKT6BSwsgpCrfaktL6aOFxk69aLH30ihBYjnsWWT9fFz0r8f/xyW6B16SAQnZlcZGHWF8IclDrwq7XeUDN8QJDgFQNJqlBddrBP7QOUG68oOqXVeeNlA+wAL91SrOx+lHCm8FOl7x8hSDMjU8w///NlOcDlcFPI0Tk7enw+Ycnt3bDiAhqLSlTicRP4yQSdIP9G0aIg6F3cUlfr2ECSdGkzIOKZ8WKRALIPfwXob3srtbd5/R4yJkJJcYNroCoZaMzZ60fxagqQY+W0c9GR3yb/bSM8XQ3pxZMcHEOTuqmgLgsH6KmLLWv+dH2UGlbXKOf6xQ36dvViR5bk1titMLZVUqBS1nwavS6cYOjdGBAG0vFqSQ3nx4M1oXNaI7qvWimm0Gr9bK/EjiNNGroWMm3IkxMgu69sI8j/twS5+biz0fwAA' $BG_Image &= 'AABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($BG_Image) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Neo_Matrix_800x500_cut_32c.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_BG_Image You need The Matrix Sound.au3 which is in the Zip archive (see below) to run the code properly!
       
      Download: The Matrix v1.31 (incl. sound), without sound The Matrix v1.30
       
      Can you decipher the code?
       
    • By UEZ
      I wrote a dll and the wrapper to convert non-animated WebP images to a GDI/GDI+ format / encode any GDI+ supported image to WebP format for use in Autoit.
      What is WebP?
      You can find more information about WebP and WebP tools / source codes here: https://developers.google.com/speed/webp
      Maybe useful for one or the other... 🙂
      WebP.au3:
      ;Version 0.3.1 build 2022-06-13 beta #include-once #include <GDIPlus.au3> Enum $WEBP_PRESET_DEFAULT = 0, _ ; default preset. $WEBP_PRESET_PICTURE, _ ; digital picture, like portrait, inner shot $WEBP_PRESET_PHOTO, _ ; outdoor photograph, with natural lighting $WEBP_PRESET_DRAWING, _ ; hand or line drawing, with high-contrast details $WEBP_PRESET_ICON, _ ; small-sized colorful images $WEBP_PRESET_TEXT ; text-like ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_Ver ; Description ...: Displays the DLL version information in a messagebox window ; Syntax ........: WebP_Ver([$sPath2DLL = ""]) ; Parameters ....: $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: None ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func WebP_Ver($sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found DllCall($sDLL, "none", "WebP_DLL_Version") Return True EndFunc ;==>WebP_Ver ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_Ver2 ; Description ...: Returns the DLL version information ; Syntax ........: WebP_Ver([$sPath2DLL = ""]) ; Parameters ....: $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: DLL version ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func WebP_Ver2($sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found Return DllCall($sDLL, "str", "Web_DLL_Version2")[0] EndFunc ;==>WebP_Ver ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_BitmapGetInfo ; Description ...: Gets some rudimentary information about the WebP image ; Syntax ........: WebP_BitmapGetInfo($sFilename[, $sPath2DLL = ""]) ; Parameters ....: $sFilename - file to load ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: Struct ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_BitmapGetInfo($sFilename, $sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found If Not FileExists($sFilename) Then Return SetError(2, 0, 0) ;file not found Local $iFileSize = FileGetSize($sFilename), $nBytes Local $tBuffer = DllStructCreate("struct;byte bin[" & $iFileSize & "];endstruct") Local Const $hFile = _WinAPI_CreateFile($sFilename, 2, 2) _WinAPI_ReadFile($hFile, $tBuffer, $iFileSize, $nBytes) _WinAPI_CloseHandle($hFile) If Int(BinaryMid($tBuffer.bin, 1, 4)) <> 1179011410 Or Int(BinaryMid($tBuffer.bin, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP Local $tWebPBitstreamFeatures = DllStructCreate("struct;long width; long height; long has_alpha; long has_animation; long format; ulong pad[5];endstruct") Local $iReturn = DllCall($sDLL, "long", "WebP_BitmapGetInfo", "struct*", $tBuffer, "uint", $iFileSize, "struct*", $tWebPBitstreamFeatures) If $iReturn = 0 Then Return SetError(4, 0, 0) Return $tWebPBitstreamFeatures EndFunc ;==>WebP_BitmapGetInfo ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_BitmapCreateGDIp ; Description ...: Converts (decodes) a WebP image from disk to a GDI / GDI+ bitmap handle ; Syntax ........: WebP_BitmasFilename[, $bGDIImage = False[, $sPath2DLL = ""]]) ; Parameters ....: $sFilename - file to load ; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle). If True then output is GDI bitmap handle ; $bCountColors - [optional] a boolean value. Default is False. If True then the colors will be counted and saved in extended. Use @extended to get color count. ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: GDI / GDIPlus bitmap handle and color count if $bCountColors = True in extended. ; Author ........: UEZ ; Modified ......: ; Remarks .......: Currently only WebP images are supported - no animated WebP images yet! ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_BitmapCreateGDIp($sFilename, $bGDIImage = False, $bCountColors = False, $sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found If Not FileExists($sFilename) Then Return SetError(2, 0, 0) ;file not found Local $iFileSize = FileGetSize($sFilename), $nBytes Local $tBuffer = DllStructCreate("byte bin[" & $iFileSize & "]") Local Const $hFile = _WinAPI_CreateFile($sFilename, 2, 2) _WinAPI_ReadFile($hFile, $tBuffer, $iFileSize, $nBytes) _WinAPI_CloseHandle($hFile) If Int(BinaryMid($tBuffer.bin, 1, 4)) <> 1179011410 Or Int(BinaryMid($tBuffer.bin, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP Local $tColors = DllStructCreate("struct;ulong cc;endstruct") Local Const $hBitmap = DllCall($sDLL, "ptr", "WebP_BitmapCreateGDIp", "struct*", $tBuffer, "uint", $iFileSize, "boolean", $bGDIImage, "boolean", $bCountColors, "struct*", $tColors)[0] If $hBitmap = 0 Then Return SetError(4, 0, 0) Return SetExtended($tColors.cc, $hBitmap) EndFunc ;==>WebP_BitmapCreateGDIp ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_BitmapCreateGDIpFromMem ; Description ...: Converts (decodes) a WebP image from memory to a GDI / GDI+ bitmap handle ; Syntax ........: WebP_BitmapCreateGDIpFromMem($tBuffer[, $iBufferSize = 0[, $bGDIImage = False[, $sPath2DLL = ""]]]) ; Parameters ....: $tBuffer - a dll struct with WebP binary data as content or pointer to the memory data ; $iBufferSize - the size of the binary data (file size) ; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle). If True then output is GDI bitmap handle ; $bCountColors - [optional] a boolean value. Default is False. If True then the colors will be counted and saved in extended. Use @extended to get color count. ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir ; Return values .: GDI / GDIPlus bitmap handle and color count if $bCountColors = True in extended. ; Author ........: UEZ ; Modified ......: ; Remarks .......: Currently only WebP images are supported - no animated WebP images yet! ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_BitmapCreateGDIpFromMem($tBuffer, $iBufferSize = 0, $bGDIImage = False, $bCountColors = False, $sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found If $iBufferSize = 0 Then Return SetError(2, 0, 0) Local $binMem If IsPtr($tBuffer) Then Local $tMem = DllStructCreate("byte bin[" & $iBufferSize & "]", $tBuffer) $binMem = $tMem.bin Else $binMem = DllStructGetData($tBuffer, 1) EndIf If Int(BinaryMid($binMem, 1, 4)) <> 1179011410 Or Int(BinaryMid($binMem, 9, 6)) <> 88331643929943 Then Return SetError(3, 0, 0) ;header must contain RIFF and WEBPVP Local $tColors = DllStructCreate("struct;ulong cc;endstruct") Local Const $hBitmap = DllCall($sDLL, "ptr", "WebP_BitmapCreateGDIp", "struct*", $tBuffer, "uint", $iBufferSize, "boolean", $bGDIImage, "boolean", $bCountColors, "struct*", $tColors)[0] If $hBitmap = 0 Then Return SetError(4, 0, 0) Return SetExtended($tColors.cc, $hBitmap) EndFunc ;==>WebP_BitmapCreateGDIpFromMem ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_CreateWebPLossySimpleFromBitmap ; Description ...: Converts a bitmap to WebP lossy image and save it to HD ; Syntax ........: WebP_CreateWebPLossySimpleFromBitmap($sFilename, $hBitmap[, $iQuality = 75[, $sPath2DLL = ""]]) ; Parameters ....: $sFilename - file to load ; $hBitmap - GDIPlus bitmap handle ; $iQuality - [optional] an integer value. Default is 75. Valid range is 0 - 100. ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir. ; Return values .: 0 for failure, 1 for success. ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_CreateWebPLossySimpleFromBitmap($sFilename, $hBitmap, $iQuality = 75, $sPath2DLL = "") If $sFilename = "" Then Return SetError(1, 0, 0) Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPLossySimpleFromBitmap", "str", $sFilename, "ptr", $hBitmap, "float", $iQuality)[0] If $iReturn = 0 Then Return SetError(3, 0, 0) Return 1 EndFunc ;==>WebP_CreateWebPLossySimpleFromBitmap ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_CreateWebPLosslessSimpleFromBitmap ; Description ...: Converts a bitmap to WebP lossless image and save it to HD ; Syntax ........: WebP_CreateWebPLosslessSimpleFromBitmap($sFilename, $hBitmap[, $sPath2DLL = ""]) ; Parameters ....: $sFilename - file to load ; $hBitmap - GDIPlus bitmap handle ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir. ; Return values .: 0 for failure, 1 for success. ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_CreateWebPLosslessSimpleFromBitmap($sFilename, $hBitmap, $sPath2DLL = "") If $sFilename = "" Then Return SetError(1, 0, 0) Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPLosslessSimpleFromBitmap", "str", $sFilename, "ptr", $hBitmap)[0] If $iReturn = 0 Then Return SetError(3, 0, 0) Return 1 EndFunc ;==>WebP_CreateWebPLosslessSimpleFromBitmap ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_CreateWebPAdvancedFromBitmap ; Description ...: Converts a bitmap to WebP lossy / lossless image and save it to HD ; Syntax ........: WebP_CreateWebPAdvancedFromBitmap($sFilename, $hBitmap[, $WebPPreset = $WEBP_PRESET_DEFAULT[, $lossless = 0[, ; $quality = 75.0[, $method = 4[, $sns_strength = 50[, $filter_sharpness = 0[, $filter_strength = 60[, ; $pass = 1[, $level = 6[, $sPath2DLL = ""]]]]]]]]]]) ; Parameters ....: $sFilename - file to load ; $hBitmap - GDIPlus bitmap handle ; $WebPPreset - [optional] an unknown value. Default is $WEBP_PRESET_DEFAULT. ; $lossless - [optional] an unknown value. Default is 0. 0 for lossy encoding / 1 for lossless.. ; $quality - [optional] an unknown value. Default is 75.0. Valid range is 0 - 100. ; $method - [optional] a map. Default is 4. Valid range is 0 - 6 (0=fast, 6=slower-better). ; $sns_strength - [optional] a string value. Default is 50. Spatial Noise Shaping. 0=off, 100=maximum ; $filter_sharpness - [optional] a floating point value. Default is 0. Range: [0 = off .. 7 = least sharp] ; $filter_strength - [optional] a floating point value. Default is 60. Range: [0 = off .. 100 = strongest] ; $pass - [optional] a pointer value. Default is 1. Number of entropy-analysis passes (in [1..10]). ; $level - [optional] an unknown value. Default is 6. Between 0 (fastest, lowest compression) and 9 (slower, best compression) only valid for lossless = 1! ; $near_lossless - [optional] an unknown value. Default is 100. Near lossless encoding [0 = max loss .. 100 = off (default)]. ; $alpha_compression - [optional] an unknown value. Default is 1. Algorithm for encoding the alpha plane (0 = none,1 = compressed with WebP lossless). Default is 1. ; $alpha_filtering - [optional] an unknown value. Default is 1. Predictive filtering method for alpha plane.0: none, 1: fast, 2: best. Default if 1. ; $alpha_quality - [optional] an unknown value. Default is 100. Between 0 (smallest size) and 100 (lossless). Default is 100. ; $target_size - [optional] an unknown value. Default is 0. If non-zero, set the desired target size in bytes. ; $NoSave - [optional] an unknown value. Default is False. ; $pMem - [optional] a string value. Default is Null. If $NoSave = True then the pointer to the memory which holds the data will be returned. ; $pCallback - [optional] a pointer value. Default is 0. Pointer to a callback address for progress hook. ; $sPath2DLL - [optional] a string value. Default is "". Path to WebP dll if not in script dir. ; Return values .: negative value for failure, 1 for success or the struct with information (pointers, size) if $NoSave = True ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_CreateWebPAdvancedFromBitmap($sFilename, $hBitmap, $WebPPreset = $WEBP_PRESET_DEFAULT, $lossless = 0, $quality = 75.0, $method = 4, $sns_strength = 50, _ $filter_sharpness = 0, $filter_strength = 60, $pass = 1, $level = 6, $near_lossless = 100, $alpha_compression = 1, $alpha_filtering = 1, $alpha_quality = 100, _ $target_size = 0, $NoSave = False, $pCallback = 0, $sPath2DLL = "") If $sFilename = "" And Not $NoSave Then Return SetError(1, 0, 0) Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found Local $tMem = DllStructCreate("struct;ptr pPic; ptr pWriter; ptr pMemData; uint memsize;endstruct") Local $iReturn = DllCall($sDLL, "long", "WebP_CreateWebPAdvancedFromBitmap", _ "str", $sFilename, _ ;Webp filename "ptr", $hBitmap, _ ;handle to GDI+ bitmap "long", $WebPPreset, _ ;WebPPreset "long", $lossless, _ ;lossless "float", $quality, _ ;quality "long", $method, _ ;method "long", $sns_strength, _ ;sns_strength "long", $filter_sharpness, _ ;filter_sharpness "long", $filter_strength, _ ;filter_strength "long", $pass, _ ;pass "long", $level, _ ;level "long", $near_lossless, _ ;near_lossless "long", $alpha_compression, _ ;alpha_compression "long", $alpha_filtering, _ ;alpha_filtering "long", $alpha_quality, _ ;alpha_quality "long", $target_size, _ ;target_size "bool", $NoSave, _ ; "struct*", $tMem, _ ; "ptr", @AutoItX64 ? $pCallback : 0)[0] ;x86 crashes for unknown reason If $iReturn < 0 Then Return SetError(3, 0, $iReturn) If $NoSave And $tMem.memsize = 0 Then SetError(4, 0, 0) Return $NoSave ? $tMem : $iReturn EndFunc ;==>WebP_CreateWebPAdvancedFromBitmap ; #FUNCTION# ==================================================================================================================== ; Name ..........: WebP_FreeUp ; Description ...: Release the ressources from $tMem struct ; Syntax ........: WebP_FreeUp(Byref $tMem[, $sPath2DLL = ""]) ; Parameters ....: $tMem - [in/out] a dll struct value. ; $sPath2DLL - [optional] a string value. Default is "". ; Return values .: 1 ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: https://developers.google.com/speed/webp ; Example .......: No ; =============================================================================================================================== Func WebP_FreeUp(ByRef $tMem, $sPath2DLL = "") Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(1, 0, 0) ;DLL not found Local $iReturn = DllCall($sDLL, "long", "WebP_FreeUp", "struct*", $tMem)[0] Return $iReturn EndFunc ;==>WebP_FreeUp ; #FUNCTION# ==================================================================================================================== ; Name ..........: BitmapCountColors ; Description ...: Counts the colors used by the bitmap ; Syntax ........: BitmapCountColors($hBitmap) ; Parameters ....: $hBitmap - a handle to a GDI+ bitmap. ; $bGDIImage - [optional] a boolean value. Default is False (GDIPlus bitmap handle). ; Return values .: Number of colors used by the image. ; Author ........: UEZ ; Modified ......: ; Remarks .......: The result may differ from other programs for JPG images depending on the decoder. ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func BitmapCountColors($hBitmap = 0, $bGDIImage = False, $sPath2DLL = "") If IsPtr($hBitmap) = 0 Or $hBitmap = 0 Then SetError(1, 0, 0) Local $sDLL = Path2DLL($sPath2DLL) If Not FileExists($sDLL) Then Return SetError(2, 0, 0) ;DLL not found Local $iReturn = DllCall(Path2DLL(), "ulong", "BitmapCountColors", "ptr", $hBitmap)[0] Return $iReturn EndFunc ; #INTERNAL_USE_ONLY#============================================================================================================ ; Name...........: Path2DLL ; Description ...: Return the path to the _WebP_x??.dll ; Author ........: UEZ ; Modified.......: ; Remarks .......: This function is used internally by WebP.au3 ; =============================================================================================================================== Func Path2DLL($sPath2DLL = "") Return $sPath2DLL ? $sPath2DLL : @ScriptDir & (@AutoItX64 ? "\_WebP_x64.dll" : "\_WebP_x86.dll") EndFunc ;==>Path2DLL  
      WebP Advanced Encoder GUI:

      ;Coded by UEZ build 2022-06-18 #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_Res_HiDpi=n #AutoIt3Wrapper_Version=p #AutoIt3Wrapper_Compile_Both=y #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe ;/rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #pragma compile(Icon, WebP_logo_2010_by_Simo99.ico) #pragma compile(FileVersion, 0.9.9.0) #pragma compile(ProductVersion, 3.3.16.1) #pragma compile(CompanyName, "UEZ Software Development") #pragma compile(ProductName, "WebP Advanced Encoder GUI") AutoItSetOption("MustDeclareVars", 1) #include <Array.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GuiMenu.au3> #include <GuiStatusBar.au3> #include <Memory.au3> #include <SliderConstants.au3> #include <StaticConstants.au3> #include <WinAPISysWin.au3> #include <WinAPITheme.au3> #include <WindowsConstants.au3> #include "WebP.au3" Break(0) If @OSBuild < 10240 Then MsgBox($MB_ICONWARNING, "Warning", "Your Windows version is not support!", 30) If WebP_Ver2() < "0.3.1" Then Exit MsgBox($MB_ICONERROR, "ERROR", "DLL Version v0.3.1+ required!", 30) Global Const $ver = "v0.99", $build = "build 2022-06-18" #Region TichySID Global Const $tagIMAGE_DOS_HEADER = 'WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhdr;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WORD e_sp;WORD e_csum;WORD e_ip;WORD e_cs;WORD e_lfarlc;WORD e_ovno;WORD e_res[4];WORD e_oemid;WORD e_oeminfo;WORD e_res2[10];LONG e_lfanew;' Global Const $tagIMAGE_FILE_HEADER = 'WORD Machine;WORD NumberOfSections;DWORD TimeDateStamp;DWORD PointerToSymbolTable;DWORD NumberOfSymbols;WORD SizeOfOptionalHeader;WORD Characteristics;' Global $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;DWORD BaseOfData;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;' If @AutoItX64 Then $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;' Global Const $tagIMAGE_NT_HEADER = 'DWORD Signature;' & $tagIMAGE_FILE_HEADER & $tagIMAGE_OPTIONAL_HEADER Global Const $tagIMAGE_SECTION_HEADER = 'CHAR Name[8];DWORD VirtualSize;DWORD VirtualAddress;DWORD SizeOfRawData;DWORD PointerToRawData;DWORD PointerToRelocations;DWORD PointerToLinenumbers;WORD NumberOfRelocations;WORD NumberOfLinenumbers;DWORD Characteristics;' Global Const $tagIMAGE_DATA_DIRECTORY = 'DWORD VirtualAddress;DWORD Size;' Global Const $tagIMAGE_BASE_RELOCATION = 'DWORD VirtualAddress;DWORD SizeOfBlock;' Global Const $tagIMAGE_IMPORT_DESCRIPTOR = 'DWORD OriginalFirstThunk;DWORD TimeDateStamp;DWORD ForwarderChain;DWORD Name;DWORD FirstThunk;' Global Const $tagIMAGE_IMPORT_BY_NAME = 'WORD Hint;char Name[1];' Global Const $tagIMAGE_EXPORT_DIRECTORY = 'DWORD Characteristics;DWORD TimeDateStamp;WORD MajorVersion;WORD MinorVersion;DWORD Name;DWORD Base;DWORD NumberOfFunctions;DWORD NumberOfNames;DWORD AddressOfFunctions;DWORD AddressOfNames;DWORD AddressOfNameOrdinals;' Global $_KERNEL32DLL = DllOpen('kernel32.dll') Global $_MFHookPtr, $_MFHookBak, $_MFHookApi = 'LocalCompact' Global Const $tagModule = 'PTR ExportList;PTR CodeBase;PTR ImportList;PTR DllEntry;DWORD Initialized;' Global Const $SID_MEMORY = 1 Global Const $SID_NON_DEFAULT = 2 Global $hTitchysidDll, $iSubsongCount = 0 #EndRegion ; enum _PROCESS_DPI_AWARENESS -> https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx Global Enum $DPI_AWARENESS_INVALID = -1, $PROCESS_DPI_UNAWARE = 0, $PROCESS_SYSTEM_DPI_AWARE, $PROCESS_PER_MONITOR_DPI_AWARE ;https://docs.microsoft.com/en-us/windows/desktop/hidpi/dpi-awareness-context Global Enum $Context_UnawareGdiScaled = -5, $Context_PerMonitorAwareV2, $Context_PerMonitorAware, $Context_SystemAware, $Context_Unaware ; enum _MONITOR_DPI_TYPE Global Enum $MDT_EFFECTIVE_DPI = 0, $MDT_ANGULAR_DPI, $MDT_RAW_DPI Global Const $MDT_DEFAULT = $MDT_EFFECTIVE_DPI Global Const $SM_CXPADDEDBORDER = 92 _GDIPlus_Startup() ;~ Global $aDPI = _WinAPI_GetDpiForMonitor() ;_GDIPlus_GraphicsGetDPIRatio() Global $aDPI = [1, 1] Global $hGUI_About, $iFPS = 0, $iShowFPS = 0, $bExit, $bGUIBgColor = 0xFF808080 #Region GUI Global Const $SC_DRAGMOVE = 0xF012, $iW = 322, $iH = 694 Global Const $hGUI = GUICreate("WAE GUI " & $ver & " Beta by UEZ", $iW, $iH, @DesktopWidth - 330, -1, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_APPWINDOW, $WS_EX_TOPMOST, $WS_EX_NOACTIVATE)) GUISetFont(10 * $aDPI[0], 400, 0, "Arial Narrow") Global Const $Title = GUICtrlCreateLabel("WebP Advanced Encoder GUI", 5, 8, 310, 41) GUICtrlSetFont(-1, 21 * $aDPI[0], 400, 0, "Arial Narrow") Global Const $icLoad = GUICtrlCreateIcon(@SystemDir & "\shell32.dll", -127, 8, 60, 32, 32, BitOR($GUI_SS_DEFAULT_ICON, $WS_BORDER)) GUICtrlSetTip(-1, "Load a GDI+ supported image") Global Const $icSave = GUICtrlCreateIcon(@SystemDir & "\shell32.dll", -259, 56, 60, 32, 32, BitOR($GUI_SS_DEFAULT_ICON, $WS_BORDER)) GUICtrlSetTip(-1, "Save compressed image in WebP format.") Global Const $icReset = GUICtrlCreateIcon(@SystemDir & "\shell32.dll", -239, 104, 60, 32, 32, BitOR($GUI_SS_DEFAULT_ICON, $WS_BORDER)) GUICtrlSetTip(-1, "Reset image position if image was moved (only for images larger than preview window).") GUICtrlCreateLabel("", 0, 106, 324, 2, $SS_ETCHEDHORZ) Global Const $lbPresets = GUICtrlCreateLabel("Presets", 10, 125, 39, 20) Global Const $cbPreset = GUICtrlCreateCombo("Default", 120, 120, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL)), $hcbPreset = GUICtrlGetHandle($cbPreset) GUICtrlSetData(-1, "Picture|Photo|Drawing|Icon|Text") Global Const $chkbLossless = GUICtrlCreateCheckbox("&Lossless", 120, 152, 97, 17) GUICtrlSetTip(-1, "Enable lossless compression. Default: lossy.") Global Const $lbEncoding = GUICtrlCreateLabel("Encoding", 10, 152, 48, 20) Global Const $lbQuality = GUICtrlCreateLabel("Quality", 10, 176, 36, 20) Global Const $slQuality = GUICtrlCreateSlider(116, 176, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslQuality = GUICtrlGetHandle($slQuality) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 75) GUICtrlSetTip(-1, "Between 0 and 100. 0 gives the smallest size and 100 the largest.") Global Const $ipQuality = GUICtrlCreateInput("", 274, 172, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slQuality)) Global Const $lbMethod = GUICtrlCreateLabel("Method", 10, 210, 39, 20) Global Const $slMethod = GUICtrlCreateSlider(116, 210, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslMethod = GUICtrlGetHandle($slMethod) GUICtrlSetLimit(-1, 6, 0) GUICtrlSetData(-1, 4) GUICtrlSetTip(-1, "Quality/speed trade-off (0=fast, 6=slower-better.") Global Const $ipMethod = GUICtrlCreateInput("", 274, 206, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slMethod)) Global Const $lbSNS_Strength = GUICtrlCreateLabel("SNS-Strength", 10, 242, 66, 20) Global Const $slSNS_Strength = GUICtrlCreateSlider(116, 244, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslSNS_Strength = GUICtrlGetHandle($slSNS_Strength) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 50) GUICtrlSetTip(-1, "Spatial Noise Shaping. 0=off, 100=maximum.") Global Const $ipSSN_Strength = GUICtrlCreateInput("", 274, 240, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slSNS_Strength)) Global Const $lbFilterSharpness = GUICtrlCreateLabel("Filter Sharpness", 10, 274, 81, 20) Global Const $slFilter_Sharpness = GUICtrlCreateSlider(116, 278, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslFilter_Sharpness = GUICtrlGetHandle($slFilter_Sharpness) GUICtrlSetLimit(-1, 7, 0) GUICtrlSetTip(-1, "Range: [0 = off .. 7 = least sharp].") Global Const $ipFilter_Sharpness = GUICtrlCreateInput("", 274, 274, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slFilter_Sharpness)) Global Const $lbFilter_Strength = GUICtrlCreateLabel("Filter Strenght", 010, 304, 69, 20) Global Const $slFilter_Strength = GUICtrlCreateSlider(116, 312, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslFilter_Strength = GUICtrlGetHandle($slFilter_Strength) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 60) GUICtrlSetTip(-1, "Range: [0 = off .. 100 = strongest]") Global Const $ipFilter_Strength = GUICtrlCreateInput("", 274, 308, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slFilter_Strength)) Global Const $lbPass = GUICtrlCreateLabel("Pass", 10, 344, 27, 20) Global Const $slPass = GUICtrlCreateSlider(116, 346, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslPass = GUICtrlGetHandle($slPass) GUICtrlSetLimit(-1, 10, 1) GUICtrlSetData(-1, 6) GUICtrlSetTip(-1, "Number of entropy-analysis passes (in [1..10]).") Global Const $ipPass = GUICtrlCreateInput("", 274, 342, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slPass)) Global Const $lbNear_Lossless = GUICtrlCreateLabel("Near Lossless", 10, 378, 80, 20) Global Const $slNear_Lossless = GUICtrlCreateSlider(116, 380, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslNear_Lossless = GUICtrlGetHandle($slNear_Lossless) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 60) GUICtrlSetTip(-1, "Specify the level of near-lossless image preprocessing. The range is 0 (maximum preprocessing) to 100 (no preprocessing, the default).") Global Const $ipNear_Lossless = GUICtrlCreateInput("", 274, 374, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slNear_Lossless)) Global Const $lbLevel = GUICtrlCreateLabel("Level", 10, 411, 30, 20) Global Const $slLevel = GUICtrlCreateSlider(116, 414, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslLevel = GUICtrlGetHandle($slLevel) GUICtrlSetLimit(-1, 9, 0) GUICtrlSetData(-1, 6) GUICtrlSetTip(-1, "Switch on lossless compression mode with the specified level between 0 and 9, with level 0 being the fastest, 9 being the slowest.") Global Const $ipLevel = GUICtrlCreateInput("", 274, 410, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slLevel)) Global Const $lbAlpha_Compression = GUICtrlCreateLabel("Alpha Compression", 10, 444, 96, 20) Global Const $chkbAlpha_Compression = GUICtrlCreateCheckbox("&Enable", 120, 444, 97, 17) GUICtrlSetState(-1, $GUI_CHECKED) Global Const $lbAlpha_Filtering = GUICtrlCreateLabel("Alpha Filtering", 10, 478, 71, 20) Global Const $slAlpha_Filtering = GUICtrlCreateSlider(114, 482, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslAlpha_Filtering = GUICtrlGetHandle($slAlpha_Filtering) GUICtrlSetLimit(-1, 2, 0) GUICtrlSetData(-1, 1) GUICtrlSetTip(-1, "Predictive filtering method for alpha plane. 0: none, 1: fast, 2: best. Default if 1.") Global Const $ipAlpha_Filtering = GUICtrlCreateInput("", 274, 478, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slAlpha_Filtering)) Global Const $lbAlpha_Quality = GUICtrlCreateLabel("Alpha Quality", 8, 516, 66, 20) Global Const $slAlpha_Quality = GUICtrlCreateSlider(114, 516, 158, 21, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_ENABLESELRANGE)), $hslAlpha_Quality = GUICtrlGetHandle($slAlpha_Quality) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, 100) GUICtrlSetTip(-1, "Between 0 (smallest size) and 100 (lossless).") Global Const $ipAlpha_Quality = GUICtrlCreateInput("", 274, 512, 28, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetData(-1, GUICtrlRead($slAlpha_Quality)) Global Const $lbTarget_Size = GUICtrlCreateLabel("Target Size", 10, 552, 58, 20) Global Const $ipTarget_Size = GUICtrlCreateInput("0", 120, 550, 121, 24, $ES_NUMBER) GUICtrlSetTip(-1, "If non-zero, set the desired target size in bytes (lossy mode only!).") Global Const $chkbCountColors = GUICtrlCreateCheckbox("&Count Colors", 10, 590, 87, 17) Global Const $lbColorOriginal = GUICtrlCreateLabel("Source:", 101, 590, 38, 20) Global Const $ipColorOriginal = GUICtrlCreateInput("0", 142, 588, 60, 24, BitOR($ES_NUMBER, $ES_READONLY)) Global Const $lbColorWebP = GUICtrlCreateLabel("WebP:", 215, 590, 32, 20) Global Const $ipColorWebP = GUICtrlCreateInput("0", 250, 588, 60, 24, BitOR($ES_NUMBER, $ES_READONLY)) Global Const $btnShow = GUICtrlCreateButton("Show Original Image", 10, 630, 123, 25) GUICtrlSetTip(-1, "Press lmb and hold it to display original image.") Global Const $btnApply = GUICtrlCreateButton("&Apply Settings", 188, 630, 123, 25) Global Const $StatusBar = _GUICtrlStatusBar_Create($hGUI), $iSBColor = 0xE9CFEC _WinAPI_SetWindowTheme($StatusBar, "", "") _GUICtrlStatusBar_SetText($StatusBar, " Welcome to 'WebP Advanced Encoder GUI' ٩(●̮̮̃•̃)۶") _GUICtrlStatusBar_SetBkColor($StatusBar, $iSBColor) Global Const $hGUI_Image = GUICreate("", 0, 0, -1, -1, $WS_EX_TOOLWINDOW, BitOR($WS_EX_TOOLWINDOW, $WS_EX_APPWINDOW)) GUISetBkColor(BitAND(0xFFFFFF, $bGUIBgColor), $hGUI_Image) Global Const $iPic_WebP = GUICtrlCreatePic("", 0, 0, 0, 0), $hPic_WebP = GUICtrlGetHandle($iPic_WebP) ;~ Global Const $iW_Zoom = @DesktopWidth * 0.25, $iH_Zoom = @DesktopHeight * 0.25 ;~ Global Const $hGUI_Image_Zoom = GUICreate("", $iW_Zoom, $iH_Zoom, 0, 0, $WS_POPUP) Global Const $dw = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME), $dh = _WinAPI_GetSystemMetrics($SM_CYDLGFRAME) + _WinAPI_GetSystemMetrics($SM_CYSIZE) + 1 Global Enum $idAbout = 5000, $idResetPicPos, $idResetValues Global Const $hMenu_Sys = _GUICtrlMenu_GetSystemMenu($hGUI) _GUICtrlMenu_AppendMenu($hMenu_Sys, $MF_SEPARATOR, 0, 0) _GUICtrlMenu_AppendMenu($hMenu_Sys, $MF_STRING, $idAbout, "About") Global Const $hImage_Icon = _GDIPlus_BitmapCreateFromMemory(_WebP_Icon()) Global Const $hIcon = _GDIPlus_HICONCreateFromBitmap($hImage_Icon) _WinAPI_SetClassLongEx($hGUI, -34, $hIcon) _GDIPlus_ImageDispose($hImage_Icon) GUISetState(@SW_HIDE, $hGUI_Image) GUISetState(@SW_SHOW, $hGUI) ;~ GUISetState(@SW_SHOW, $hGUI_Image_Zoom) _WinAPI_SetProcessDpiAwarenessContext($Context_PerMonitorAwareV2, $hGUI, 2) Global Const $iDummy_About = GUICtrlCreateDummy(), $iDummy_Return = GUICtrlCreateDummy() Global $sFileLoad, $hImage, $hImage_GDI, $hHBitmap, $aDim, $aPixelFormat, $pMemData, $pMemData_Size, $tMem, $mp, $sFileSave, $hFile, $nBytes, $nBytes, $iResetPosX, $iResetPosY, _ $hImage_tmp GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES") GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN") GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU") GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND") GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") #EndRegion GUI Global $aGUIGetMsg, $aMPos1, $aMPos2, $iMPx, $iMPy, $iMPx_p = 0, $iMPy_p = 0, $bBigger = False, $iResult, $old_cursor, $bNew = False While 1 $mp = GUIGetCursorInfo($hGUI) If $hImage And $mp[2] And $mp[4] = $btnShow Then _WinAPI_DeleteObject(GUICtrlSendMsg($iPic_WebP, $STM_SETIMAGE, $IMAGE_BITMAP, $hImage_GDI)) While $mp[2] $mp = GUIGetCursorInfo($hGUI) Sleep(10) WEnd _WinAPI_DeleteObject(GUICtrlSendMsg($iPic_WebP, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap)) EndIf $mp = GUIGetCursorInfo($hGUI_Image) $aMPos1 = MouseGetPos() If $mp[4] = $iPic_WebP And $mp[2] And $bBigger And WinActive($hGUI_Image) Then While $mp[2] $mp = GUIGetCursorInfo($hGUI_Image) Sleep(10) $aMPos2 = MouseGetPos() $iMPx = $iMPx_p + $aMPos2[0] - $aMPos1[0] $iMPy = $iMPy_p + $aMPos2[1] - $aMPos1[1] ControlMove($hGUI_Image, "", $iPic_WebP, $iMPx, $iMPy) WEnd $iMPx_p = $iMPx $iMPy_p = $iMPy EndIf $aGUIGetMsg = GUIGetMsg(1) Switch $aGUIGetMsg[1] Case $hGUI Switch $aGUIGetMsg[0] Case $GUI_EVENT_CLOSE GUIRegisterMsg($WM_DROPFILES, "") GUIRegisterMsg($WM_LBUTTONDOWN, "") GUIRegisterMsg($WM_COMMAND, "") GUIRegisterMsg($WM_CONTEXTMENU, "") GUIRegisterMsg($WM_SYSCOMMAND, "") GUIRegisterMsg($WM_HSCROLL, "") ;~ If IsDllStruct($tMem) Then WebP_FreeUp($tMem) _WinAPI_DestroyIcon($hIcon) If $hImage_tmp Then _GDIPlus_ImageDispose($hImage_tmp) If $hImage Then _GDIPlus_ImageDispose($hImage) If $hHBitmap Then _WinAPI_DeleteObject($hHBitmap) If $hImage_GDI Then _WinAPI_DeleteObject($hImage_GDI) If $hGUI_Image Then GUIDelete($hGUI_Image) _GDIPlus_Shutdown() GUIDelete($hGUI_Image) GUIDelete($hGUI) DllClose($_KERNEL32DLL) Exit Case $btnApply, $iDummy_Return If $hImage Then CompressAndDisplay($hImage) EndIf Case $icLoad $sFileLoad = FileOpenDialog("Select an image to compress", "", "Images (*.jpg;*.bmp;*.png;*.gif;*.tif;*webp)") If @error Then ContinueLoop LoadImage($sFileLoad) Case $icSave If $hImage Then $sFileSave = FileSaveDialog("Save WebP Image", "", "WebP Image (*.webp)", BitOR($FD_PATHMUSTEXIST, $FD_PROMPTOVERWRITE), StringRegExpReplace($sFileLoad, ".+\\(.+)\..*", "$1") & ".webp", $hGUI) If @error Then ContinueLoop $hFile = _WinAPI_CreateFile($sFileSave, 1) $iResult = _WinAPI_WriteFile($hFile, $tMem.pMemData, $tMem.memsize, $nBytes) _WinAPI_CloseHandle($hFile) If Not $iResult Then MsgBox($MB_ICONERROR, "ERROR", "Unable to save WebP image to disk!", 30, $hGUI) Else MsgBox($MB_ICONINFORMATION, "Information", "WebP image successfully save to disk", 10, $hGUI) EndIf EndIf Case $icReset ResetImage() Case $slAlpha_Filtering GUICtrlSetData($ipAlpha_Filtering, GUICtrlRead($slAlpha_Filtering)) Case $slAlpha_Quality GUICtrlSetData($ipAlpha_Quality, GUICtrlRead($slAlpha_Quality)) Case $slFilter_Sharpness GUICtrlSetData($ipFilter_Sharpness, GUICtrlRead($slFilter_Sharpness)) Case $slFilter_Strength GUICtrlSetData($ipFilter_Strength, GUICtrlRead($slFilter_Strength)) Case $slLevel GUICtrlSetData($ipLevel, GUICtrlRead($slLevel)) Case $slMethod GUICtrlSetData($ipMethod, GUICtrlRead($slMethod)) Case $slNear_Lossless GUICtrlSetData($ipNear_Lossless, GUICtrlRead($slNear_Lossless)) Case $slPass GUICtrlSetData($ipPass, GUICtrlRead($slPass)) Case $slQuality GUICtrlSetData($ipQuality, GUICtrlRead($slQuality)) Case $slSNS_Strength GUICtrlSetData($ipSSN_Strength, GUICtrlRead($slSNS_Strength)) Case $iDummy_About AutoItSetOption("GUIOnEventMode", 1) GDIPlus_About(11 * $aDPI[0], 0.5, 18.5) AutoItSetOption("GUIOnEventMode", 0) EndSwitch Case $hGUI_Image Switch $aGUIGetMsg[0] Case $GUI_EVENT_CLOSE EndSwitch EndSwitch WEnd Func ResetImage() If $bBigger Then $iMPx_p = $iResetPosX $iMPy_p = $iResetPosY ControlMove($hGUI_Image, "", $iPic_WebP, $iMPx_p, $iMPy_p) EndIf EndFunc Func LoadImage($sFileLoad) If $hImage_tmp Then _GDIPlus_ImageDispose($hImage_tmp) If $hImage Then _GDIPlus_ImageDispose($hImage) If $hImage_GDI Then _WinAPI_DeleteObject($hImage_GDI) If StringRight($sFileLoad, 5) = ".webp" Then $hImage_tmp = WebP_BitmapCreateGDIp($sFileLoad) If @error Or $hImage_tmp = 0 Then Return MsgBox($MB_ICONERROR, "ERROR", "Unable to decode WebP image!", 30, $hGUI) EndIf Else $hImage_tmp = _GDIPlus_ImageLoadFromFile($sFileLoad) If @error Or $hImage_tmp = 0 Then Return MsgBox($MB_ICONERROR, "ERROR", "Unknown image format!", 30, $hGUI) EndIf EndIf $aPixelFormat = _GDIPlus_ImageGetPixelFormat($hImage_tmp) ;Local Const $aImageRawFormat = _GDIPlus_ImageGetRawFormat($hImage_tmp) If BitAND(GUICtrlRead($chkbCountColors), $GUI_CHECKED) Then GUICtrlSetData($ipColorOriginal, BitmapCountColors($hImage_tmp)) Else GUICtrlSetData($ipColorOriginal, 0) EndIf ;~ If $hImage_tmp Then ConsoleWrite("Original color count: " & BitmapCountColors($hImage_tmp) & @CRLF) $aDim = _GDIPlus_ImageGetDimension($hImage_tmp) $hImage = _GDIPlus_BitmapCreateFromScan0($aDim[0], $aDim[1]) Local Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hImage) If $aPixelFormat[0] = 2498570 Then _GDIPlus_GraphicsClear($hGfx, $bGUIBgColor) _GDIPlus_GraphicsDrawImageRect($hGfx, $hImage_tmp, 0, 0, $aDim[0], $aDim[1]) _GDIPlus_GraphicsDispose($hGfx) $hImage_GDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $bNew = True _WinAPI_LockWindowUpdate($hGUI) CompressAndDisplay($hImage, $aPixelFormat[1]) _WinAPI_LockWindowUpdate(0) EndFunc ;==>LoadImage Func CompressAndDisplay($hImage, $sFormat = "") Local $aDim = _GDIPlus_ImageGetDimension($hImage) If $hHBitmap Then _WinAPI_DeleteObject($hHBitmap) $pMemData = 0 $pMemData_Size = 0 Local $iPreset = GUICtrlRead($cbPreset) Switch $iPreset Case "Default" $iPreset = 0 Case "Picture" $iPreset = 1 Case "Photo" $iPreset = 2 Case "Drawing" $iPreset = 3 Case "Icon" $iPreset = 4 Case "Text" $iPreset = 5 EndSwitch ;~ If IsDllStruct($tMem) Then WebP_FreeUp($tMem) $old_cursor = MouseGetCursor() GUISetCursor(15, 1, $hGUI) _GUICtrlStatusBar_SetBkColor($StatusBar, 192) Local $iCallback = DllCallbackRegister("Progress", "long", "long;ptr"), $hCallback = DllCallbackGetPtr($iCallback) Sleep(10) Local $end, $fTimer = TimerInit() $tMem = WebP_CreateWebPAdvancedFromBitmap("", $hImage, _ $iPreset, _ BitAND(GUICtrlRead($chkbLossless), $GUI_CHECKED), _ GUICtrlRead($slQuality), _ GUICtrlRead($slMethod), _ GUICtrlRead($slSNS_Strength), _ GUICtrlRead($slFilter_Sharpness), _ GUICtrlRead($slFilter_Strength), _ GUICtrlRead($slPass), _ GUICtrlRead($slLevel), _ GUICtrlRead($slNear_Lossless), _ BitAND(GUICtrlRead($chkbAlpha_Compression), $GUI_CHECKED), _ GUICtrlRead($slAlpha_Filtering), _ GUICtrlRead($slAlpha_Quality), _ GUICtrlRead($ipTarget_Size), _ True, _ ;hold the compressed image in memory only, no save to HD! $hCallback) $end = TimerDiff($fTimer) DllCallbackFree($hCallback) ToolTip("") _GUICtrlStatusBar_SetBkColor($StatusBar, $iSBColor) GUISetCursor($old_cursor, 1, $hGUI) Local $iColorsWebp = 0 If IsDllStruct($tMem) Then _GUICtrlStatusBar_SetText($StatusBar, "WebP size: " & Round($tMem.memsize / 1024, 2) & " kb / encoded in " & Round($end, 2) & " ms.") $hHBitmap = WebP_BitmapCreateGDIpFromMem($tMem.pMemData, $tMem.memsize, True, BitAND(GUICtrlRead($chkbCountColors), $GUI_CHECKED)) If @error Then Return MsgBox($MB_ICONERROR, "ERROR", "Unable to compress image", 30, $hGUI) $iColorsWebp = @extended GUICtrlSetData($ipColorWebP, $iColorsWebp) If BitAND(GUICtrlRead($chkbCountColors), $GUI_CHECKED) And GUICtrlRead($ipColorOriginal) = "0" Then GUICtrlSetData($ipColorOriginal, BitmapCountColors($hImage_tmp)) ;~ ConsoleWrite("WebP image color count: " & @extended & @CRLF) Local $aTaskbar = WinGetPos("[CLASS:Shell_TrayWnd;INSTANCE:1]", ""), $tbw = 0, $tbh = 0 If $aTaskbar[2] > $aTaskbar[3] Then $tbh = $aTaskbar[3] ELse $tbw = $aTaskbar[2] EndIf Local Const $minw = 384, $minh = $minw * 10 / 16 Local $maxw = Min($aDim[0] + $dw, @DesktopWidth * 0.95), $maxh = Min($aDim[1] + $dh, @DesktopHeight * 0.95), $iNewW = 0, $iNewH = 0 If $aDim[0] + $dw > @DesktopWidth * 0.95 Or $aDim[1] + $dh > @DesktopHeight * 0.95 Then $bBigger = True Else $bBigger = False EndIf If $bNew Then $iNewW = Max($minw, $maxw) $iNewH = Max($minh, $maxh) WinMove($hGUI_Image, "", (@DesktopWidth - $iNewW - (@DesktopWidth - $iW > $iNewW ? $iW : 0)) / 2 - $tbw, (@DesktopHeight - $iNewH - $tbh) / 2, $iNewW, $iNewH) WinSetTitle($hGUI_Image, "", StringRegExpReplace($sFileLoad, ".+\\(.*)", "$1") & " / " & $aDim[0] & "x" & $aDim[1] & " px / " & $sFormat & " / " & Round(FileGetSize($sFileLoad) / 1024, 2) & " kb") $iNewH -= $dh ;_WinAPI_GetSystemMetrics($SM_CXBORDER) + _WinAPI_GetSystemMetrics($SM_CYSIZE) + _WinAPI_GetSystemMetrics($SM_CXPADDEDBORDER) * 2 $iMPx_p = ($iNewW - $aDim[0]) / 2 $iMPy_p = ($iNewH - $aDim[1] - 4) / 2 $iResetPosX = $iMPx_p $iResetPosY = $iMPy_p GUICtrlSetPos($iPic_WebP, $iMPx_p, $iMPy_p, $iNewW - 1, $iNewH - 1) $bNew = False EndIf _WinAPI_DeleteObject(GUICtrlSendMsg($iPic_WebP, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap)) Local Const $iWC_State = WinGetState($hGUI_Image) If $iWC_State <> 7 Or $iWC_State <> 5 Then WinSetState($hGUI_Image, "", @SW_SHOW) WinActivate($hGUI_Image) EndIf WinActivate($hGUI) Else MsgBox($MB_ICONERROR, "ERROR", "DLL encode error " & $tMem, 30) EndIf EndFunc ;==>CompressAndDisplay Func Progress($progress, $ptr) ToolTip($progress & "%", MouseGetPos(0) - 40, MouseGetPos(1)) Return 1 EndFunc Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $wParam Switch $lParam Case $hslAlpha_Filtering GUICtrlSetData($ipAlpha_Filtering, GUICtrlRead($slAlpha_Filtering)) Case $hslAlpha_Quality GUICtrlSetData($ipAlpha_Quality, GUICtrlRead($slAlpha_Quality)) Case $hslFilter_Sharpness GUICtrlSetData($ipFilter_Sharpness, GUICtrlRead($slFilter_Sharpness)) Case $hslFilter_Strength GUICtrlSetData($ipFilter_Strength, GUICtrlRead($slFilter_Strength)) Case $hslLevel GUICtrlSetData($ipLevel, GUICtrlRead($slLevel)) Case $hslMethod GUICtrlSetData($ipMethod, GUICtrlRead($slMethod)) Case $hslNear_Lossless GUICtrlSetData($ipNear_Lossless, GUICtrlRead($slNear_Lossless)) Case $hslPass GUICtrlSetData($ipPass, GUICtrlRead($slPass)) Case $hslQuality GUICtrlSetData($ipQuality, GUICtrlRead($slQuality)) Case $hslSNS_Strength GUICtrlSetData($ipSSN_Strength, GUICtrlRead($slSNS_Strength)) EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_HSCROLL Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam) Local $i = 1 Local $aFileList = _WinAPI_DragQueryFileEx($wParam) Do If StringInStr(FileGetAttrib($aFileList[$i]), "D") Then _ArrayDelete($aFileList, $i) Else $i += 1 EndIf Until $i = UBound($aFileList) $aFileList[0] = UBound($aFileList) - 1 $sFileLoad = $aFileList[1] _WinAPI_DragFinish($wParam) LoadImage($sFileLoad) Return 0 EndFunc ;==>WM_DROPFILES# Func WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) EndFunc ;==>_WM_LBUTTONDOWN Func WM_SYSCOMMAND($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $ilParam Switch BitAND($iwParam, 0x0000FFFF) Case $idAbout GUICtrlSendToDummy($iDummy_About) EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_SYSCOMMAND Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg Switch $iwParam Case 1 GUICtrlSendToDummy($iDummy_Return) Return 0 Case $idResetPicPos ResetImage() Return 0 Case $idResetValues GUICtrlSetData($slAlpha_Filtering, 1) GUICtrlSetData($ipAlpha_Filtering, 1) GUICtrlSetData($slAlpha_Quality, 100) GUICtrlSetData($ipAlpha_Quality, 100) GUICtrlSetData($slFilter_Sharpness, 0) GUICtrlSetData($ipFilter_Sharpness, 0) GUICtrlSetData($slFilter_Strength, 60) GUICtrlSetData($ipFilter_Strength, 60) GUICtrlSetData($slLevel, 6) GUICtrlSetData($ipLevel, 6) GUICtrlSetData($slMethod, 4) GUICtrlSetData($ipMethod, 4) GUICtrlSetData($slNear_Lossless, 60) GUICtrlSetData($ipNear_Lossless, 60) GUICtrlSetData($slPass, 6) GUICtrlSetData($ipPass, 6) GUICtrlSetData($slQuality, 75) GUICtrlSetData($ipQuality, 75) GUICtrlSetData($slSNS_Strength, 50) GUICtrlSetData($ipSSN_Strength, 50) GUICtrlSetData($ipTarget_Size, 0) GUICtrlSetState($chkbAlpha_Compression, $GUI_CHECKED) GUICtrlSetState($chkbLossless, $GUI_UNCHECKED) _SendMessage($hcbPreset, $CB_SETCURSEL, 0) Return 0 EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_COMMAND Func WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $lParam Switch $hWnd Case $hGUI Local $hMenu $hMenu = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_InsertMenuItem($hMenu, 0, "Reset values to default", $idResetValues) If $bBigger Then _GUICtrlMenu_InsertMenuItem($hMenu, 1, 0) _GUICtrlMenu_InsertMenuItem($hMenu, 2, "Reset image position", $idResetPicPos) EndIf _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam) _GUICtrlMenu_DestroyMenu($hMenu) Return True EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_CONTEXTMENU Func Max($a, $b) If $a > $b Then Return $a Return $b EndFunc Func Min($a, $b) If $a < $b Then Return $a Return $b EndFunc Func GDIPlus_About($iFontsize = 10, $dx = 0, $dy = 0, $iSpeed = 333, $sFont = "MV Boli") If @AutoItX64 = 0 Then Local $binSIDSound = _Chip_Sound() _SIDStartup() _SIDOpen($binSIDSound) EndIf Local Const $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ About Window" Local Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi #Region text Local $sText = _ "WebP Advanced Encoder GUI ²" & _ " " & $ver & " beta " & _ " " & $build & " " & _ " " & _ " Coded by UEZ ;-) " & _ " " & _ "Credits to: " & _ " " & _ "* Google for the WebP API " & _ " and static libraries " & _ "* wakillon for TichySID " & _ " and Stat-Mat for the DLL " & _ "* Soren Lund for SID Tune " & _ "* Ward for Mem call code " & _ " " & _ "-------------------------- " & _ " " & _ "Greetings fly out to: " & _ " " & _ " All Autoit users " & _ " around the globe " & _ " " & _ " " & _ " Press ESC to exit. " & _ " " & _ " " & _ "-------------------------- " & _ " " & _ "NO ..--+++--.. WAR " & _ " .-' | `-. " & _ " +' | `+ " & _ " ' | ` " & _ " ' | ` " & _ ": | :" & _ ": +'|`+ :" & _ ". +' | `+ ;" & _ " + +' | `+ + " & _ " `. +' | `+ .' " & _ " `._ | _.' " & _ "Peace `--.._|_..--' :-) " #EndRegion $bExit = False $hGUI_About = GUICreate($sTitle, $iW, $iH, 0, 0, $WS_POPUP, $WS_EX_NOPARENTNOTIFY, $hGUI) _WinAPI_SetParent($hGUI_About, $hGUI) WinSetTrans($hGUI_About, "", 0xD8) GUISetState(@SW_SHOWNA, $hGUI_About) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI_About) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_HatchBrushCreate(18, 0xF0B0B0E0, 0xF0F0F0FF), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 100, 24) $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Local $iLen = StringLen($sText), $iColums = StringInStr($sText, "²"), $i, $u, $s, $r, $iChar_Space, $x, $y, $t = 0, $f, $b = 0, $a = 512, $iCharCol = 0x101030 $sText = StringReplace($sText, "²", " ") Local $aChars = StringSplit($sText, "", 2) Local $hFormat_char = _GDIPlus_StringFormatCreate(), $hFamily_char = _GDIPlus_FontFamilyCreate($sFont), $hFont_char = _GDIPlus_FontCreate($hFamily_char, $iFontsize, 1), _ $tLayout_char = _GDIPlus_RectFCreate(), $hBrush_char = _GDIPlus_BrushCreateSolid(0xFF000000 + $iCharCol) Local Const $iMilliSeconds = 5 AdlibRegister("CalcFPS", 1000) Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, "float", $iW, "float", $iH) ;erase canvas background For $i = 0 To UBound($aChars) - 1 If $aChars[$i] <> " " Then $f = $t - $i / $iSpeed $s = $f > 2 ? 2 : $f $s = $s > 0 ? $s : 0 $r = (2 - $s) * $iColums * $iColums $iChar_Space = $s / 4.5 * $iColums $tLayout_char.x = $dx + $r / 2 * Sin($t + $i) + Mod($i, $iColums) * $iChar_Space $tLayout_char.y = $dy + $r / 3 * Cos($t + $i) + Int($i / $iColums) * $iChar_Space * 1.3333 DllCall($__g_hGDIPDll, "int", "GdipDrawString", "handle", $hCanvas, "wstr", $aChars[$i], "int", -1, "handle", $hFont_char, "struct*", $tLayout_char, "handle", $tLayout_char, "handle", $hBrush_char) EndIf Next $t += 0.025 DllCall($__g_hGDIPDll, "int", "GdipDrawString", "handle", $hCanvas, "wstr", "FPS: " & $iShowFPS, "int", -1, "handle", $hFont_FPS, "struct*", $tLayout_FPS, "handle", $hFormat_FPS, "handle", $hBrush_FPS) DllCall("gdi32.dll", "bool", "BitBlt", "handle", $hDC, "int", 0, "int", 0, "int", $iW, "int", $iH, "handle", $hDC_backbuffer, "int", 0, "int", 0, "dword", $SRCCOPY) $iFPS += 1 If $bExit Then ExitLoop If $r = 0 Then $b = 1 If $b Then $a -= 5 If $a < 256 Then DllCall($__g_hGDIPDll, "int", "GdipSetSolidFillColor", "handle", $hBrush_char, "dword", BitShift(Max(0, $a), -24) + $iCharCol) If $a <= -50 Then $b = 0 $a = 384 DllCall($__g_hGDIPDll, "int", "GdipSetSolidFillColor", "handle", $hBrush_char, "dword", 0xFF000000 + $iCharCol) $t = 0 EndIf EndIf DllCall($_KERNEL32DLL, "dword", "SleepEx", "dword", $iMilliSeconds, "bool", True) Until False AdlibUnRegister("CalcFPS") ;release resources _GDIPlus_FontDispose($hFont_char) _GDIPlus_FontFamilyDispose($hFamily_char) _GDIPlus_StringFormatDispose($hFormat_char) _GDIPlus_BrushDispose($hBrush_char) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI_About, $hDC) GUIDelete($hGUI_About) If @AutoItX64 = 0 Then _SIDStop() _SIDClose() _SIDShutdown() $binSIDSound = 0 EndIf EndFunc ;==>GDIPlus_About Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS Func _GDIPlus_GraphicsGetDPIRatio($iDPIDef = 96) Local $hGfx = _GDIPlus_GraphicsCreateFromHWND(0) If @error Then Return SetError(1, @extended, 0) Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetDpiX", "handle", $hGfx, "float*", 0) If @error Then Return SetError(2, @extended, 0) Local $iDPI = $aResult[2] _GDIPlus_GraphicsDispose($hGfx) Local $aResults[2] = [$iDPIDef / $iDPI, $iDPI / $iDPIDef] Return $aResults EndFunc ;==>_GDIPlus_GraphicsGetDPIRatio Func _WinAPI_GetDpiForMonitor($dpiType = $MDT_DEFAULT, $iDPIDef = 96) Local $aMonitors = _WinAPI_EnumDisplayMonitors() Local $x, $y Local $aRet = DllCall("Shcore.dll", "long", "GetDpiForMonitor", "long", $aMonitors[1][0], "int", $dpiType, "uint*", $x, "uint*", $y) If @error Or Not IsArray($aRet) Then Return SetError(1, 0, 0) Local $aDPI[2] = [$iDPIDef / $aRet[3], $aRet[3] / $iDPIDef] Return $aDPI EndFunc ;==>_WinAPI_GetDpiForMonitor Func _WinAPI_SetDPIAwareness($hGUI = 0) Switch @OSBuild Case 6000 To 9199 If Not DllCall("user32.dll", "bool", "SetProcessDPIAware") Then Return SetError(1, 0, 0) Return 1 Case 9200 To 13999 _WinAPI_SetProcessDpiAwareness($PROCESS_PER_MONITOR_DPI_AWARE) If @error Then Return SetError(1, 0, 0) Return 1 Case @OSBuild > 13999 #cs Context_Unaware = ((DPI_AWARENESS_CONTEXT)(-1)), Context_SystemAware = ((DPI_AWARENESS_CONTEXT)(-2)), Context_PerMonitorAware = ((DPI_AWARENESS_CONTEXT)(-3)), Context_PerMonitorAwareV2 = ((DPI_AWARENESS_CONTEXT)(-4)), Context_UnawareGdiScaled = ((DPI_AWARENESS_CONTEXT)(-5)) #ce _WinAPI_SetProcessDpiAwarenessContext($Context_PerMonitorAwareV2, $hGUI) If @error Then Return SetError(3, @error, 0) Return 1 EndSwitch Return -1 EndFunc ;==>_WinAPI_SetDPIAwareness Func _WinAPI_SetProcessDpiAwareness($DPIAware) ;https://docs.microsoft.com/en-us/windows/desktop/api/shellscalingapi/nf-shellscalingapi-setprocessdpiawareness DllCall("Shcore.dll", "long", "SetProcessDpiAwareness", "int", $DPIAware) If @error Then Return SetError(1, 0, 0) Return 1 EndFunc ;==>_WinAPI_SetProcessDpiAwareness ;https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setprocessdpiawarenesscontext Func _WinAPI_SetProcessDpiAwarenessContext($DPIAwareContext = $Context_PerMonitorAware, $hGUI = 0, $iMode = 1) ;https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setprocessdpiawarenesscontext $DPIAwareContext = ($DPIAwareContext < -5) ? -5 : ($DPIAwareContext > -1) ? -1 : $DPIAwareContext $iMode = ($iMode < 1) ? 1 : ($iMode > 3) ? 3 : $iMode Switch $iMode Case 1 Local $hDC = _WinAPI_GetDC($hGUI) Local $aResult1 = DllCall("user32.dll", "ptr", "GetDpiFromDpiAwarenessContext", "ptr", $hDC) If @error Or Not IsArray($aResult1) Then Return SetError(11, 0, 0) _WinAPI_ReleaseDC(0, $hDC) Local $aResult = DllCall("user32.dll", "Bool", "SetProcessDpiAwarenessContext", "int", $aResult1[0] + $DPIAwareContext) If @error Or Not IsArray($aResult) Then Return SetError(12, 0, 0) Case 2 ;~ If Not $hGUI Then $hGUI = WinGetHandle(AutoItWinGetTitle()) Local $aResult2 = DllCall("user32.dll", "int", "GetWindowDpiAwarenessContext", "ptr", $hGUI) If @error Or Not IsArray($aResult2) Then Return SetError(21, 0, 0) Local $aResult = DllCall("user32.dll", "Bool", "SetProcessDpiAwarenessContext", "int", $aResult2[0] + $DPIAwareContext) If @error Or Not IsArray($aResult) Then Return SetError(22, 0, 0) Case 3 Local $aResult31 = DllCall("user32.dll", "ptr", "GetThreadDpiAwarenessContext") If @error Or Not IsArray($aResult31) Then Return SetError(31, 0, 0) Local $aResult32 = DllCall("user32.dll", "ptr", "GetAwarenessFromDpiAwarenessContext", "ptr", $aResult31[0]) If @error Or Not IsArray($aResult32) Then Return SetError(32, 0, 0) Local $aResult = DllCall("user32.dll", "Bool", "SetThreadDpiAwarenessContext", "int", $aResult32[0] + $DPIAwareContext) If @error Or Not IsArray($aResult) Then Return SetError(33, 0, 0) EndSwitch Return 1 EndFunc ;==>_WinAPI_SetProcessDpiAwarenessContext ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _Chip_Sound($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Chip_Sound $Chip_Sound &= 'UFNJRAACAHwAABAAEAMAAQABAAAAAENvbW1vZG9yZSA2NAAAAAAAAAAAAAAAAAAAAAAAAAAAU/hyZW4gTHVuZCAoSmVmZikAAAAAAAAAAAAAAAAAAAAyMDA0IFZpcnV6L0NhbWVsb3QAAAAAAAAAAAAAAAAAAAAUAAAAAAAQTH0RTOoRTA0SrZaJkpWarS0oAykgCgUGBi8WCRIVGi0BAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFic4S19ziqG61PAOLU5xlr3nE0J0qeAbWpviLHvOJ4XoUcE3tDfEV/WcTgnQo4JuaG6Ir+s5nBOhRgTc0NwQXtZyOCZCjAi4oLggvKzkcEyEGBBwQHBAeFjI4JgIMCAuAQEBAQEBAQEBAQECAgICAgICAwMDAwMEBAQEBQUFBgYGBwcICAkJCgoLDA0NDg8QERITFBUXGBobHR8gIiQnKSsuMTQ3Oj5BRUlOUldcYmhudXyDi5Ocpa+5xNDd6vj9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzRkAAAAAACAaAAAAAABlGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKkPjfMRuSUQCqq9BheNexG9BxeNfBG5KRCNIxCtJBCNMhaNZxK5LRCNTxG5MRCNVhG5NRCNXRGiACDBEaIHIMERog6pAZ0+EZ05EZ1lEakCnQ8RqQSdEhGpAJ04EZ0TEZ1NEZ08ESAtEkxcFKX7SKX8SKkACQCNGNSiDiCpE6IHIKkTogAgqRNohfxohftgpftIpfxIog4gJRKiByAlEqIAICUSTAYSvTsR8OJMyhSp/506EZ0lEbwTEbmWGJ1jEbm2GJ0QEakAnSMRnRQRnTsRnSgRnSkRuTYZnScRuVYZnSYRqQOdEhHgANAZuRYZjRfU' $Chip_Sound &= 'ufYYKfCN8RG51hiNaBGpAI1vEb04EcnA8CO5dhidBtSdPxC5VhidBdSdPhCpCZ0E1L1NEZ1OEakAnTgRYLxiEbmwGZ0G1J0/ELmTGUyWEqn/nToRTEMTKR+dDhH+PBHITC4T8OrJ/fAhsGipA50SEamAnSURjHoRvBMRuTYZnScRuVYZnSYRrHoR/jwRyEwuEyl/nRMR/jwRyEwuE71mEZ0PEb0+EdAJIMoUvU0RnU4RvTkQhfu9OhCF/Lw8EbH7yfuwn8mwsE/JgLDFyWCwh50kEf48Eb0OEZ05Ecix+8n/0Aj+TxGpAJ08Eb0+EdAQvTgRyRDwJ8kg8C/JUPBKYEwtEr0PEfCVyQLwCJADTMoUTJYUTCEU/jwRyEwuE71iEZ0lEakAnTgRYLxiEbmTGZ1jEakAnTgRYN4PEb05EfDCvQ8R8BhMyhS8YhG5sBmdPxC5kxmdPhCpAJ04EWC9ZRFJAZ1lEai5exGdDxHeORFMyhTwEsn+8AmpAJ0+EchMOxSp/p06EakAnT4RTEUUyMmwkDeMehE46bCdYhGouXYZnTgRMAWpAJ0+Eax6EUw7FLw8EfA2qf+dOhGdPhG9ORCF+706EIX8vDwRsfvJ+7CiyWCwur0+EfAPqf6dOhGpAJ0/EKn/nT4QTMoUvVARhfu9URGF/LxPEbH7MBmoua0anTkQuccanToQTCYUsfudTxGoTGkUyMn/8PIpf51NEf5PEUxpFL1lEUkBnWURqLl7EZ1mESDKFL04EclA0BSpAJ0SEZ0oEZ0pEZ04Eb1iEZ09EWDeFBFMCBWpAZ07Eb0UEdDwvBMRufYYKQ+dFBG8YxG5DhfJ/vAfkAyYOPl2F51jEahM4hSdZxEp9509ELl2F51kEf5jEbwlETATvSYRGHmwGZ0mEb0nEXmTGZ0nEb1nESkI0Dq9JBEYfU4RfWQRhfuouU4QGH0mEY14EbmuEH0nEY15Eb0SEfAryQLwJJBirXgRnQDUrXkRnQHU' $Chip_Sound &= 'TDEWvSYRnQDUvWQRGH0nEZ0B1EwxFkz0FaT7uU8QOPlOEIX7ua8Q+a4Qhfy8PRG5kxlKaQCdIxG5sBnwCaiIRvxm+4gQ+f4SEaX7nVIRpfydUxFMMRa9KBEYfVIRnSgRvSkRfVMRnSkRrXgRGH0oEZ0A1K15EX0pEZ0B1L0jEd4jEdBPvD0RuZMZGGkBnSMR/hIRTDEWvSgROP1SEZ0oEb0pEf1TEZ0pEa14ERh9KBGdANSteRF9KRGdAdS9IxHeIxHQD7w9EbmTGRhpAZ0jEd4SEeAA0FisaBHwU7kOGNAbuSAYjXYRjRbUuUQY8ECNaBGouQ4YjXcRTI0WrGgR8C65IBgYbW8RjW8RuTIYbXYRjXYRjRbUuQ4YzXcRzncR0A25RBiNaBGouQ4YjXcRvBAR8F653hfQI7nqF508EJ0D1CnwnTsQnQLUuQIY8EOdEBGoud4XnRERTPAWvBAR8DG56hcYfTsQnTsQnQLUufYXfTwQnTwQnQPUud4X3RER3hER0A25AhidEBGoud4XnRERvT8QnQbUvT4QnQXUvT0QPToRnQTUYAQE////////Cf5B/okZGRkYGP6JSYiIiP+JGfn4/kFBQUERERER/0FBQUERERER/0FBQUERERER/0FBQUERERER/0FBQUERERER/4n+Ef4RQf4T/hkZGRkZGRn+if4T/hP+iRkZGBgYGBgY/xH+Ff4AAAAAzwkHBgQDAM8NVFBUApgeHh4AAAAAAAAAAAAIAAMHDAADBwwIAAUIDAAFCAwIAAUJDAAFCQwIAAUKDAAFCgwIzwAAAAAAABgAEAcGBQQEAwDPAAwADAAyDQkHBgUEBAQIAAAAAAAAEBAAADAwABAgIAAEQMAIBiDgBhAQ8AAAAP8AAAD/AAAA/wACAwIABgcGCQoLCgAABwAAAAcAMACAgACAgIAAAACwANzAqAAQgFCgYIjAgIB4aAAA6AAAAOwABAAA/wD//wAAAAACAAICBgAI' $Chip_Sound &= 'AAoLCg0ODw4KCgAHBwcNBgkAAQcBAQEBtwECxwYHAcYGDQDhwQSnBgMFd4eHh/W3tSMldzs7OztzRTZze41FfWv1JUVDaXWZNVUAAgICBAsFERYCHygxOkMWC0VHRxZKR0wWFlRWWFpkZgABAQEABAAABAQFBQUFAAQEAAgIBAQIAAQEBAAAAAAAAAEDBAAAAAAJBQAAAAAHCQAHEQwRDBAAERERAAAAAAAQEBAQAAAAADAQAgICAhAwABAwMDAwMAAwMDAAAAAAAPHx8fEAAAAA8/EAAAAA8fMA8fPz8/PzAPPz8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMDAwEDAQBBAQFAQEFBQEBAQEBAQEBAQwBAQEBAQzNzsBQAIAAgI1P8A5AEA/5AwqKCQgPuw+gD++hzKysoCXwUIAwRN+BBLRTD4AAAAAACAABiAgCAAAAkNBAQEBAQEBAQEBAQEBAQEBgYGDwYGBg8GBgYPBgYGDwEBBwgBAQcIAQEHCAEBBwgGBgYPBgYGDwYGBg8GBgYPBgYGDwYGBg8QExUTEBMVE/8BCowDBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBIAFBQUFGBmMAwQEBAQEBAQEBAQEBAQEBIARFBYUERQWFP8BCwIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDIwXFxcXEgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBP8B4eQBGz1fkK3K5+vy+RQ2WHWeyuz8Ez1qi74aGhsbGxsbGxsbGxsbHBwcHBwcHBwdHR0dHW/+/4JgD7Ni+4FgG7Ni+7BgD7P7iWEbsWAPs/u0G/v/hGEA/gD+hQD+hwD+AIYAhAD+hQD+hwCGAP+IYCf8LPwi/Cf8Lvwi/Cn8Lvwl/Cn8Kvwl/Cf8Kvws' $Chip_Sound &= '/Cf//GAn/Cz8Ivwn/C78Ivwp/C78Jfwp/Cr8Jfwn/Cr8LPwn/4pgM7X7Y/5gM7X7Y/6LYDW1Yvtv/oxgMbX7Y/5gMbX7Y/6NYDW1+2P+i2A1tftr/v+CYA2zYvuBYA+zYvuwYA+z+4lhG7FgD7P7tBv7/4JgErNi+4FgHrNi+7BgErP7iWEesWASs/u0Hvv/gmAWs2L7gWAis2L7sGAWs/uJYSKxYBaz+7Qi+/+OZwD/kWAMtmb7/2H+hgD+AP+EYQD+AP6FAP6HAP4AhgCEAP6FAIYAhwCGAP+PYCf8LPwi/Cf8Lvwi/Cn8Lvwl/Cn8Kvwl/Cf8Kvws/Cf/iGAn/Cz8Ivwn/C78Ivwp/C78Jfwp/Cr8Jfwn/Cr8LPwn/4JgErNi+4FgFLNi+7BgFLP7iWEgsWAUs/u0IPv/kmAnt2L7Y/5gI7di+2P+YCK3Yvtj/mAet2L7Y/6TYBu3avty/rlg/v+bYDG+YvuSYCe3Yvtj/mAjt2L7Y/5gIrdi+2P+YB63Yvtj/pNgG7dy+2f+/5lgJ/ws/CL8J/wu/CL8Kfwu/CX8Kfwq/CX8J/wq/Cy9J//8YA+4aPt1/mv7vGP7b/7/l2MAZ/6VYAq6bvtr/rtn/rxj/pprAP+SYCe3Yvtj/mAjt2L7Y/6WYC63Yvtj/mAqt2L7Y/6TYCe3avty/rlg/v+bYCe+YvuSYCe3Yvtj/mAjt2L7Y/6WYC63Yvtj/mAqt2L7Y/6TYCe3cvtn/v+XYQCYYCL8J/wu/CL8KfwulwD8+5gq/CX8J/wq/Cz8J/+eYBjAYvvBY/vC+8Nn+8Rj+8X7xvtgSshi+8dgSsj+Sshi+8dgSsj+nxvJavvKYD9m+/+eYBjAYvvBY/vC+8Nn+8Rj+8X7y2H7zPtgSshi+8dgSsj+Sshi+8dgSsj+nz/KYvuXYwCHYQCQYwAAhWEA/w==' Local $bString = _WinAPI_Base64Decode($Chip_Sound) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Commodore_64.sid", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Chip_Sound Func _WebP_Icon($bSaveBinary = False, $sSavePath = @ScriptDir) Local $WebP_Icon $WebP_Icon &= 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAMkElEQVR4XsRZe3BU1Rn/vnPvPpNsdsnCIgkkFogoElIpFAMZmUIC5SVpBcb6ACMNFAYUi5RRKUgFNWTEDgyKBEHoA4y1ZkKxHQYspfJ0SpGEplIeCXntJvtIsu+993yF3EDGMs3eO67hd3fuP/fuOb/f9zrfOReoV8TkGBFdrwvo7oXFi5bNmjN59pzJi55dZh4OX5y91P3CXQUDFeAxZu0HhSu8BUtbpyxu/eFz3nsyIRZWnsG3BM5VDR1HgMJPFA16PdizojZHxOaI9ssM2NLAZuvX9UiEbweMqTJub9MTkcKvualRFwJPS9DvFUHGtuZrDsz+5Usbc76b7XL7BCYAECQIBKBnzO1vnD+3qKAwX3FFL2KQiP7/UAgAH+4/WLx81urSSdljfX6PBMBMKfK16v6t7iudkXpZAkBIJAhQAMbg/Q2wY/PvSn72uGJKRNTmAYXXwgUlVWd2vvVRvn1wm68FqCvkIkHMGtU0wpQmiiMQdZBwyLIhhRcUmJbM/8lXl2vLyl5FRMWgGjzQ7pbuy7XlTPEvWTM1xp3tLgmRKVYgAg5AMgEov8QDiawOUcB7X11emWWaWXWwSlsI/any2MyiSau35+RPT/W6vEE/CIwBQl+Cc56UKpstmTs2/vnqqfR/X2gApq4KbXht3cySSeXHZk6Yamxp8ISDIAgK+z4FQ+bvEPzuhqVr8yY/rcM0vC0sjoDz5y6/VGrIyPY1XvODxBAZ3BUgCMCCIfC6PHOL80w2CHR0S4iTxGajJRiJ+L2AwABRaw0hIFkmYARArHs2BI6CgAgIqFEDsWgUwoGYyQACqQshOcaVhUQrdZk4gKxPIvvA1IzMjKx778scmn3jnpGZbh9o0Rm5DDIRAWn3BUMJIBBUV0Y5cgEAuDarA+MWq85i6e9ri507faK6JtpcD6EQGAyQPgRG5/YbOXpMmiPs8/hC' $WebP_Icon &= 'fo7EtLm2Kwdlla3ErSQhVeS72OuMNGCw0dtsWb/icPG0v54/MCfPWr6m6ERZyZevzD0zod+e0/smPvHI4Z2bjwu8v/0eEZhMRNpWNwBB5UKGIAOqEaBo5EYzmFNNn+xq+KCsee+2yic/mX0HgbGrX15AEqxZ89oTBWvLduUNzY21NQVJFjT5QVYpADip84Bie0hOTd31+ilXTS4PNn2tl+yJQoExRBHeLHvlyaefyhmbtWHXw6MmiK3XZdISS8hV5gAQMHVtF+NWh/HjnTXuf33vzOlTt6mzLvxPfHIuMSaOyslsvNyZnpmypXLy4Gy32ykhqVtkUH07zTlTU3OAW+y6+mrTR1t9J0+e6qJIvbTBjHUba1BG8hcnL61aeCQcSDOZmYaqpDaJ1VlfFMmkc2ze+PeKvcdvUURQhzHjhr24cPOBXUes9jQOHCihAgAkiAdOPNmqq73QZPYOm/HoRPUbKCWWuhqWVYf3Q9BrNBiBgBLqAY7I4hYfSklK/7Tyws+Xl2rZQPXEks4IeblFF2vOJqdYZDmhAhB5fBICJzSdPwPTp83qNqoWKNny6NTHzp5oMyWlAeMJ9YAMDIDiJACGA52xTsj4jtgzjsaaPnb8xNpqEJiZJTaEAHgcBQAoYDTiN2mhfWedGOQYEPADESSiCmkHIcE3Q0zijAHDuyGAZDLokqPyN5q14XqjNQ34XRHAZTKaU3gyOOvvWDxUF6Ljnx99MAfkmJero8ExQQLwpvcZYnjMOKg6WNlNSDv2V24dPyHbH2hDlTR4ojyAN6/OQOOMopxNb6/o6d7UQZZlAKi92Hw9UDN85NBQR1TT5oAnQICy4/ZIw0fb9Rn1v/ngkPqFjHMuCAIALFn8zKLnHRy80Qgg9nkOIILEIeT3vLCu8KnFM5wtYZXsFZ179vyxLvqX/KmjvW1+xtjdKaMCsA6f1H+Ic+22ccOyTeEQKJC4xDm/k7pMssL1s6Pnnln+o3VbCkORhmgUEFAt' $WebP_Icon &= '03j7Ae2ZQMzdLD1UICx9/QGTDU8fqxn3/QdEJn4tK9jN67aZd773YcmL89/5eHKy3eVpZgIySGQZ1R5IJDFPY+ThGeay3094ZN7IeUXFdVc7uodWcGuKz49fzM0dW7pv/vufFtoz3d4WiWlmr84DpE0DyhJrbQhlPSjtOzTlSFXFiCm7B4kDfpC38P77c62WNKer/h//PPHZmd2GgVD8/IiH8gtDwRu2186eA5A6AaIgAiodkVoNxIW2ZsloaJk2b9T0uba6q0211aVHr0HwP2CzwdDpMG3V+AHpaVLE7W1tjEVRW+RwAiSdrpssiyugtaNplJhqSmHUzEHdTKgcoUWopb5Dr++w9RemzMgXdUmIJs5D0Yg/FGx31nfKMjDGBC3ncwQkGMBkFoMhCAR9AFbOgbFeT6e3vrN95cZlvz00G3V1Ppes1ddEwImoy2y3IhJRQIW3JhARityRkfS3yvDba7+MeghZdy2Oc7z+6y3lv9jy092VMwXjZZ9LUDT0KRT2Ou5ITzlS4drxqyvtzaQ3qa5Cz61c9MbKd0t+fFCODrPaOScO1NfsRYX9AVf5piudToW9qg8cPT4qK92+/r1l5X+YheIljwsRsc/4i3pwZFiOVLTeYO9rItEAmr7Q9GgofXPbG+XLdx98LMkejvkRBAFUA5W71u9QxJGR0QRVey+9u7623amwjyegFw2bNm55+a0Xpj8OnZ2AGrM5FAYZQKcDowCAav9l1IOzFb46CR11pDMCgAoBvWuoqKj0e0kUjJw0KNDr9UOGZBoNBqfT6WptQyR1AmRR1Hnbry14ttiSosLh/23WykIiPYJw51hcFEVBnxJ8MGBMBkREQV8EQfDFAw+8yGpAjSJhxYcIRiIS3VVXMt6Yw8iIJDMGIXFEFBFFxRtR8+D14C0Rx2tcD8Z18+djC8o//Q+T2SwLFtJUfVNd/1/VVdXd8itvky6eX3eZupW3SbQCb/TZAhU32WF9fILAP01OToaH' $WebP_Icon &= 'h9/c3DxAMrHmm39twPejFy/kL06AOA8ywRSBxLBL8/Pz4OHA7e0tG3GS+PWY5wcR/f8UQpi1oF0HFhYWnJ/+Wr6RA0p3t5ymGxsbg4ODEri+vj4zM6M1tLKyAnx7e1vyjR3ARBKhs7i4eHZ25sBnia6vrycmJtQLfnBwoFYQrq6ueMbU1BQEm82G8Tn65Suqq6uDiHVXh/Py8pIn+/v7SwlpMBjYNE+B2dXVVbWau7u7k8vr4eEBffJQbSExMZEURHNzM+TCwkKebDQagYSGhnp5eTG4v78vdS0SIyMjr66uIPb19RHS1tYm6cAOxsrKyq2trdbWVgJxtb8Lv01ZX/6LRW0IYmJiMGZlZWEBS0pKCIyOjoaCYM94TkBAAMTAwEA1WF1dDbGsrIzEhoYGbRfu7+/XOhkSEoJxd3eXwbm5OVIbHx8npO634kc/iPKuT7N/FF//8uE3xk++NXzGFnx9fTHi1dnC0NAQEDIrIFOEjo+PeU5eXp7ZbAYzMjJCIP0vZG9vj0Rvb2+IJpOJjWqTnsXg4GBOaDX+RV4ueKtFyWoXzVMPvzNnzP05+cwcpx8XKT+JS+udZlBQkF0LNTU1AgIta1NTE/ilpSXwCBIppaWlUUbazZ+wsLDs7GxkUVRUVHx8fHJyMuGjo6NqNb1eL7Wd2NhY4Drdx6/cUh6bxJM/AhSiW+Xp7x88Ngrl5s5CVVWVFKmkpCRKk3ehkJmZiZGyore3l9edYoxxenqaaloq2aOjI9SGxWJBZ9jc3MT65Ofnt7e3R0REqNWoT7A/vEO97/KQLrv4e/DOR4LoPUjehDO5uLhIFigjrFar4FCRBmqXI41yIb6iogLM+fm5tAIoXEYclGBubi547nIgNzc34AUF+eDPLMqjn8XTEfHr8Pfnx0rHYPWzMZH+7xRKT0+XLPj4+AAvKioSEDiLcnJyMGZkZBC4trZGorZei4uLgaDHSQ4MDw8DRyNmB/z8/KS5Ozs7UhE3dZUU' $WebP_Icon &= 'dYoCg0jWiy8N4qtO1yedn7MFnU4nWTg9PSUL2H8EtgYqDqpdOrqoQ5iQkICxpaXF7i5bWloKXtuapMeDZmdngeClX+scKVSEzYTDyhburHh6emrtokB5/5L2y8PDQ2GPuJuxk2j/7BvTxcWFeuPSbs1SW6uvr5csoPygILg/nJycxMXFIQc40rR1p6Sk9PT0EKil5eVlbIVYh8bGRpwpJAX04tTUVOIRv9ra2vLy8oGBAefOOXJfRnNDk0DL6ejokA5z941kB8bGxv7722msAxF4B6D0K05KGJl3MJ01mXGS+F6BAzmbZQv3eQXkG4Xdi4RQ7jehbOCAgyP3P94Red6jcQCLAAAAAElFTkSuQmCC' Local $bString = _WinAPI_Base64Decode($WebP_Icon) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\WebP_logo_2010_64x64_Simo99.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_WebP_Icon Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode #Region TichySID Func _SIDClose() Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDClose') If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc ;==>_SIDClose Func _SIDOpen($Sid, $iSubsong = 1) Local $bSid If Not IsBinary($Sid) Then If Not FileExists($Sid) Then Return SetError(2, 0, 0) Local $hFileOpen = FileOpen($Sid, 0) If $hFileOpen = -1 Then Return SetError(-1, 0, 0) $bSid = FileRead($hFileOpen) FileClose($hFileOpen) Else $bSid = $Sid EndIf Local $tSid = DllStructCreate('byte[' & BinaryLen($bSid) & ']') DllStructSetData($tSid, 1, $bSid) Local $sType = BinaryToString(BinaryMid($bSid, 1, 4), 1) ConsoleWrite('-->-- Sid File Type : ' & $sType & @CRLF) Local $iVersion = Execute(BinaryMid($bSid, 5, 2)) ConsoleWrite('-->-- Sid File Version : ' & $iVersion & @CRLF) $iSubsongCount = Int(StringTrimLeft(BinaryMid($bSid, 15, 2), 2)) ConsoleWrite('-->-- SubsongCount : ' & $iSubsongCount & @CRLF) $iSubsong = $iSubsong - 1 If $iSubsong < 0 Then $iSubsong = 0 If $iSubsong > $iSubsongCount Then $iSubsong = 0 ConsoleWrite('-->-- Subsong : ' & $iSubsong & @CRLF) Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDOpen', 'ptr', DllStructGetPtr($tSid), 'int', DllStructGetSize($tSid), 'int', $SID_MEMORY, 'int', $SID_NON_DEFAULT, 'int', $iSubsong) If @error Then Return SetError(@error, 0, 0) $tSid = 0 $bSid = 0 Return $aRet[0] EndFunc ;==>_SIDOpen Func _SIDShutdown() MemoryDllClose($hTitchysidDll) $hTitchysidDll = 0 EndFunc ;==>_SIDShutdown Func _SIDStartup() $hTitchysidDll = MemoryDllOpen(TitchySIDdll()) If $hTitchysidDll = -1 Then Return SetError(1, 0, 0) Return SetError(0, 0, $hTitchysidDll) EndFunc ;==>_SIDStartup Func _SIDStop() Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDStop') If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc ;==>_SIDStop Func TitchySIDdll() ;only x86 :-( Local $sFileBin = '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' $sFileBin &= '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' $sFileBin = Binary(_WinAPI_Base64Decode($sFileBin)) $sFileBin = Binary(_LzntDecompress($sFileBin)) Return SetError(0, 0, $sFileBin) EndFunc ;==>TitchySIDdll Func _LzntDecompress($bBinary) $bBinary = Binary($bBinary) Local $tInput = DllStructCreate('byte[' & BinaryLen($bBinary) & ']') DllStructSetData($tInput, 1, $bBinary) Local $tBuffer = DllStructCreate('byte[' & 16 * DllStructGetSize($tInput) & ']') Local $a_Call = DllCall('ntdll.dll', 'int', 'RtlDecompressBuffer', 'ushort', 2, 'ptr', DllStructGetPtr($tBuffer), 'dword', DllStructGetSize($tBuffer), 'ptr', DllStructGetPtr($tInput), 'dword', DllStructGetSize($tInput), 'dword*', 0) If @error Or $a_Call[0] Then Return SetError(1, 0, '') Local $tOutput = DllStructCreate('byte[' & $a_Call[6] & ']', DllStructGetPtr($tBuffer)) Return SetError(0, 0, DllStructGetData($tOutput, 1)) EndFunc ;==>_LzntDecompress Func API_FreeLibrary($Module) Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'FreeLibrary', 'handle', $Module) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_FreeLibrary Func API_GetProcAddress($Module, $Procname) If IsNumber($Procname) Then Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'int', $Procname) Else Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'str', $Procname) EndIf If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_GetProcAddress Func API_IsBadReadPtr($Ptr, $Len) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'IsBadReadPtr', 'ptr', $Ptr, 'UINT_PTR', $Len) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_IsBadReadPtr Func API_LoadLibrary($Filename) Local $Ret = DllCall($_KERNEL32DLL, 'handle', 'LoadLibraryW', 'wstr', $Filename) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_LoadLibrary Func API_lstrlenA($Address) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenA', 'ptr', $Address) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_lstrlenA Func API_lstrlenW($Address) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenW', 'ptr', $Address) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_lstrlenW Func API_VirtualProtect($Address, $Size, $Protection) Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'VirtualProtect', 'ptr', $Address, 'dword_ptr', $Size, 'dword', $Protection, 'dword*', 0) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_VirtualProtect Func API_ZeroMemory($Address, $Size) Local $Ret = DllCall($_KERNEL32DLL, 'none', 'RtlZeroMemory', 'ptr', $Address, 'dword_ptr', $Size) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_ZeroMemory Func MemLib_BuildImportTable($CodeBase, $PEHeader) Local Const $IMAGE_DIRECTORY_ENTRY_IMPORT = 1 Local Const $SizeOfPtr = DllStructGetSize(DllStructCreate('ptr', 1)) Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $ImportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_IMPORT * $SizeOfDataDirectory Local $ImportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ImportDirectoryPtr) Local $ImportSize = DllStructGetData($ImportDirectory, 'Size') Local $ImportVirtualAddress = DllStructGetData($ImportDirectory, 'VirtualAddress') Local $SizeOfImportDir = DllStructGetSize(DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR)) Local $ImportList = '' If $ImportSize > 0 Then Local $ImportDescPtr = $CodeBase + $ImportVirtualAddress While 1 If API_IsBadReadPtr($ImportDescPtr, $SizeOfImportDir) Then ExitLoop Local $ImportDesc = DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR, $ImportDescPtr) Local $NameOffset = DllStructGetData($ImportDesc, 'Name') If $NameOffset = 0 Then ExitLoop Local $Name = Peek('str', $CodeBase + $NameOffset) Local $OriginalFirstThunk = DllStructGetData($ImportDesc, 'OriginalFirstThunk') Local $FirstThunk = DllStructGetData($ImportDesc, 'FirstThunk') Local $Handle = API_LoadLibrary($Name) If $Handle Then $ImportList &= $Handle & ',' Local $FuncRef = $CodeBase + $FirstThunk Local $ThunkRef = $CodeBase + $OriginalFirstThunk If $OriginalFirstThunk = 0 Then $ThunkRef = $FuncRef While 1 Local $Ref = Peek('ptr', $ThunkRef) If $Ref = 0 Then ExitLoop If BitAND(Peek('byte', $ThunkRef + $SizeOfPtr - 1), 0x80) Then Local $Ptr = API_GetProcAddress($Handle, BitAND($Ref, 0xffff)) Else Local $IMAGE_IMPORT_BY_NAME = DllStructCreate($tagIMAGE_IMPORT_BY_NAME, $CodeBase + $Ref) Local $NamePtr = DllStructGetPtr($IMAGE_IMPORT_BY_NAME, 2) Local $FuncName = Peek('str', $NamePtr) Local $Ptr = API_GetProcAddress($Handle, $FuncName) EndIf If $Ptr = 0 Then Return SetError(1, 0, False) Poke('ptr', $FuncRef, $Ptr) $ThunkRef += $SizeOfPtr $FuncRef += $SizeOfPtr WEnd Else Return SetError(1, 0, False) EndIf $ImportDescPtr += $SizeOfImportDir WEnd EndIf Return $ImportList EndFunc ;==>MemLib_BuildImportTable Func MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr) Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader') Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections') Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment') Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader For $i = 1 To $NumberOfSections Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr) Local $VirtualAddress = DllStructGetData($Section, 'VirtualAddress') Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData') Local $PointerToRawData = DllStructGetData($Section, 'PointerToRawData') If $SizeOfRawData = 0 Then Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SectionAlignment, $MEM_COMMIT, $PAGE_READWRITE) API_ZeroMemory($Dest, $SectionAlignment) Else Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SizeOfRawData, $MEM_COMMIT, $PAGE_READWRITE) _MemMoveMemory($DllDataPtr + $PointerToRawData, $Dest, $SizeOfRawData) EndIf DllStructSetData($Section, 'VirtualSize', $Dest - $CodeBase) $SectionPtr += DllStructGetSize($Section) Next EndFunc ;==>MemLib_CopySections Func MemLib_FinalizeSections($CodeBase, $PEHeader) Local Const $IMAGE_SCN_MEM_EXECUTE = 0x20000000 Local Const $IMAGE_SCN_MEM_READ = 0x40000000 Local Const $IMAGE_SCN_MEM_WRITE = 0x80000000 Local Const $IMAGE_SCN_MEM_NOT_CACHED = 0x4000000 Local Const $IMAGE_SCN_CNT_INITIALIZED_DATA = 64 Local Const $IMAGE_SCN_CNT_UNINITIALIZED_DATA = 128 Local Const $PAGE_WRITECOPY = 0x0008 Local Const $PAGE_EXECUTE_WRITECOPY = 0x0080 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader') Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections') Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment') Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader For $i = 1 To $NumberOfSections Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr) Local $Characteristics = DllStructGetData($Section, 'Characteristics') Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData') Local $Executable = (BitAND($Characteristics, $IMAGE_SCN_MEM_EXECUTE) <> 0) Local $Readable = (BitAND($Characteristics, $IMAGE_SCN_MEM_READ) <> 0) Local $Writeable = (BitAND($Characteristics, $IMAGE_SCN_MEM_WRITE) <> 0) Local $ProtectList[8] = [$PAGE_NOACCESS, $PAGE_EXECUTE, $PAGE_READONLY, $PAGE_EXECUTE_READ, $PAGE_WRITECOPY, $PAGE_EXECUTE_WRITECOPY, $PAGE_READWRITE, $PAGE_EXECUTE_READWRITE] Local $Protect = $ProtectList[$Executable + $Readable * 2 + $Writeable * 4] If BitAND($Characteristics, $IMAGE_SCN_MEM_NOT_CACHED) Then $Protect = BitOR($Protect, $PAGE_NOCACHE) Local $Size = $SizeOfRawData If $Size = 0 Then If BitAND($Characteristics, $IMAGE_SCN_CNT_INITIALIZED_DATA) Then $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfInitializedData') ElseIf BitAND($Characteristics, $IMAGE_SCN_CNT_UNINITIALIZED_DATA) Then $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfUninitializedData') EndIf EndIf If $Size > 0 Then Local $PhysicalAddress = $CodeBase + DllStructGetData($Section, 'VirtualSize') API_VirtualProtect($PhysicalAddress, $Size, $Protect) EndIf $SectionPtr += DllStructGetSize($Section) Next EndFunc ;==>MemLib_FinalizeSections Func MemLib_FreeLibrary($ModulePtr) If Not MemLib_Vaild($ModulePtr) Then Return 0 Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = DllStructGetData($Module, 'CodeBase') Local $DllEntry = DllStructGetData($Module, 'DllEntry') Local $Initialized = DllStructGetData($Module, 'Initialized') Local $ImportListPtr = DllStructGetData($Module, 'ImportList') Local $ExportListPtr = DllStructGetData($Module, 'ExportList') If $Initialized And $DllEntry Then Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 0, 'ptr', 0) DllStructSetData($Module, 'Initialized', 0) EndIf If $ExportListPtr Then _MemGlobalFree($ExportListPtr) If $ImportListPtr Then Local $ImportList = StringSplit(Peek('str', $ImportListPtr), ',') For $i = 1 To $ImportList[0] If $ImportList[$i] Then API_FreeLibrary($ImportList[$i]) Next _MemGlobalFree($ImportListPtr) EndIf If $CodeBase Then _MemVirtualFree($CodeBase, 0, $MEM_RELEASE) DllStructSetData($Module, 'CodeBase', 0) DllStructSetData($Module, 'ExportList', 0) _MemGlobalFree($ModulePtr) Return 1 EndFunc ;==>MemLib_FreeLibrary Func MemLib_GetExportList($CodeBase, $PEHeader) Local Const $IMAGE_DIRECTORY_ENTRY_EXPORT = 0 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $ExportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_EXPORT * $SizeOfDataDirectory Local $ExportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ExportDirectoryPtr) Local $ExportSize = DllStructGetData($ExportDirectory, 'Size') Local $ExportVirtualAddress = DllStructGetData($ExportDirectory, 'VirtualAddress') Local $ExportList = '' If $ExportSize > 0 Then Local $IMAGE_EXPORT_DIRECTORY = DllStructCreate($tagIMAGE_EXPORT_DIRECTORY, $CodeBase + $ExportVirtualAddress) Local $NumberOfNames = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfNames') Local $NumberOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfFunctions') Local $AddressOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfFunctions') If $NumberOfNames = 0 Or $NumberOfFunctions = 0 Then Return '' Local $NameRef = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNames') Local $Ordinal = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNameOrdinals') For $i = 1 To $NumberOfNames Local $Ref = Peek('dword', $NameRef) Local $Idx = Peek('word', $Ordinal) Local $FuncName = Peek('str', $CodeBase + $Ref) If $Idx <= $NumberOfFunctions Then Local $Addr = $CodeBase + Peek('dword', $CodeBase + $AddressOfFunctions + $Idx * 4) $ExportList &= $FuncName & Chr(1) & $Addr & Chr(1) EndIf $NameRef += 4 $Ordinal += 2 Next EndIf Return $ExportList EndFunc ;==>MemLib_GetExportList Func MemLib_GetProcAddress($ModulePtr, $FuncName) Local $ExportPtr = Peek('ptr', $ModulePtr) If Not $ExportPtr Then Return 0 Local $ExportList = Peek('str', $ExportPtr) Local $Match = StringRegExp($ExportList, '(?i)' & $FuncName & '\001([^\001]*)\001', 3) If Not @error Then Return Ptr($Match[0]) Return 0 EndFunc ;==>MemLib_GetProcAddress Func MemLib_LoadLibrary($DllBinary) $DllBinary = Binary($DllBinary) Local $DllData = DllStructCreate('byte[' & BinaryLen($DllBinary) & ']') Local $DllDataPtr = DllStructGetPtr($DllData) DllStructSetData($DllData, 1, $DllBinary) Local $IMAGE_DOS_HEADER = DllStructCreate($tagIMAGE_DOS_HEADER, $DllDataPtr) If DllStructGetData($IMAGE_DOS_HEADER, 'e_magic') <> 0x5A4D Then Return SetError(1, 0, 0) EndIf Local $PEHeader = $DllDataPtr + DllStructGetData($IMAGE_DOS_HEADER, 'e_lfanew') Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) If DllStructGetData($IMAGE_NT_HEADER, 'Signature') <> 0x4550 Then Return SetError(1, 0, 0) EndIf Switch DllStructGetData($IMAGE_NT_HEADER, 'Magic') Case 0x10B If @AutoItX64 Then Return SetError(2, 0, 0) Case 0x20B If Not @AutoItX64 Then Return SetError(2, 0, 0) EndSwitch Local $ImageBase = DllStructGetData($IMAGE_NT_HEADER, 'ImageBase') Local $SizeOfImage = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfImage') Local $SizeOfHeaders = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfHeaders') Local $AddressOfEntryPoint = DllStructGetData($IMAGE_NT_HEADER, 'AddressOfEntryPoint') Local $ModulePtr = _MemGlobalAlloc(DllStructGetSize(DllStructCreate($tagModule)), $GPTR) If $ModulePtr = 0 Then Return SetError(3, 0, 0) Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = _MemVirtualAlloc($ImageBase, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE) If $CodeBase = 0 Then $CodeBase = _MemVirtualAlloc(0, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE) If $CodeBase = 0 Then Return SetError(3, 0, 0) DllStructSetData($Module, 'CodeBase', $CodeBase) _MemVirtualAlloc($CodeBase, $SizeOfImage, $MEM_COMMIT, $PAGE_READWRITE) Local $Base = _MemVirtualAlloc($CodeBase, $SizeOfHeaders, $MEM_COMMIT, $PAGE_READWRITE) _MemMoveMemory($DllDataPtr, $Base, $SizeOfHeaders) MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr) Local $LocationDelta = $CodeBase - $ImageBase If $LocationDelta <> 0 Then MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta) Local $ImportList = MemLib_BuildImportTable($CodeBase, $PEHeader) If @error Then MemLib_FreeLibrary($ModulePtr) Return SetError(2, 0, 0) EndIf Local $ExportList = MemLib_GetExportList($CodeBase, $PEHeader) Local $ImportListPtr = _MemGlobalAlloc(StringLen($ImportList) + 2, $GPTR) Local $ExportListPtr = _MemGlobalAlloc(StringLen($ExportList) + 2, $GPTR) DllStructSetData($Module, 'ImportList', $ImportListPtr) DllStructSetData($Module, 'ExportList', $ExportListPtr) If $ImportListPtr = 0 Or $ExportListPtr = 0 Then MemLib_FreeLibrary($ModulePtr) Return SetError(3, 0, 0) EndIf Poke('str', $ImportListPtr, $ImportList) Poke('str', $ExportListPtr, $ExportList) MemLib_FinalizeSections($CodeBase, $PEHeader) Local $DllEntry = $CodeBase + $AddressOfEntryPoint DllStructSetData($Module, 'DllEntry', $DllEntry) DllStructSetData($Module, 'Initialized', 0) If $AddressOfEntryPoint Then Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 1, 'ptr', 0) If Not $Success[0] Then MemLib_FreeLibrary($ModulePtr) Return SetError(4, 0, 0) EndIf DllStructSetData($Module, 'Initialized', 1) EndIf Return $ModulePtr EndFunc ;==>MemLib_LoadLibrary Func MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta) Local Const $IMAGE_DIRECTORY_ENTRY_BASERELOC = 5 Local Const $IMAGE_REL_BASED_HIGHLOW = 3 Local Const $IMAGE_REL_BASED_DIR64 = 10 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $RelocDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_BASERELOC * $SizeOfDataDirectory Local $RelocDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $RelocDirectoryPtr) Local $RelocSize = DllStructGetData($RelocDirectory, 'Size') Local $RelocVirtualAddress = DllStructGetData($RelocDirectory, 'VirtualAddress') If $RelocSize > 0 Then Local $Relocation = $CodeBase + $RelocVirtualAddress While 1 Local $IMAGE_BASE_RELOCATION = DllStructCreate($tagIMAGE_BASE_RELOCATION, $Relocation) Local $VirtualAddress = DllStructGetData($IMAGE_BASE_RELOCATION, 'VirtualAddress') Local $SizeOfBlock = DllStructGetData($IMAGE_BASE_RELOCATION, 'SizeOfBlock') If $VirtualAddress = 0 Then ExitLoop Local $Dest = $CodeBase + $VirtualAddress Local $Entries = ($SizeOfBlock - 8) / 2 Local $RelInfo = DllStructCreate('word[' & $Entries & ']', $Relocation + 8) For $i = 1 To $Entries Local $Info = DllStructGetData($RelInfo, 1, $i) Local $Type = BitShift($Info, 12) If $Type = $IMAGE_REL_BASED_HIGHLOW Or $Type = $IMAGE_REL_BASED_DIR64 Then Local $Addr = DllStructCreate('ptr', $Dest + BitAND($Info, 0xFFF)) DllStructSetData($Addr, 1, DllStructGetData($Addr, 1) + $LocationDelta) EndIf Next $Relocation += $SizeOfBlock WEnd EndIf EndFunc ;==>MemLib_PerformBaseRelocation Func MemLib_Vaild($ModulePtr) Local $ModuleSize = DllStructGetSize(DllStructCreate($tagModule)) If API_IsBadReadPtr($ModulePtr, $ModuleSize) Then Return False Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = DllStructGetData($Module, 'CodeBase') If Not $CodeBase Then Return False Return True EndFunc ;==>MemLib_Vaild Func MemoryDllCall($Module, $RetType, $FuncName, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0) Local $Ret, $OpenFlag = False Local Const $MaxParams = 20 If (@NumParams < 3) Or (@NumParams > $MaxParams * 2 + 3) Or (Mod(@NumParams, 2) = 0) Then Return SetError(4, 0, 0) If Not IsPtr($Module) Then $OpenFlag = True $Module = MemoryDllOpen($Module) If @error Then Return SetError(1, 0, 0) EndIf Local $Addr = MemLib_GetProcAddress($Module, $FuncName) If Not $Addr Then Return SetError(3, 0, 0) Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Addr) Switch @NumParams Case 3 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi) Case 5 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1) Case 7 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2) Case 9 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3) Case 11 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4) Case 13 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5) Case Else Local $DllCallStr = 'DllCall ( $_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1 For $i = 5 To @NumParams Step 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n $n += 1 Next $DllCallStr &= ' )' $Ret = Execute($DllCallStr) EndSwitch Local $Err = @error If $OpenFlag Then MemoryDllClose($Module) Return SetError($Err, 0, $Ret) EndFunc ;==>MemoryDllCall Func MemoryDllClose($Module) MemLib_FreeLibrary($Module) EndFunc ;==>MemoryDllClose Func MemoryDllOpen($DllBinary) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() Local $Module = MemLib_LoadLibrary($DllBinary) If @error Then Return SetError(@error, 0, -1) Return $Module EndFunc ;==>MemoryDllOpen Func MemoryFuncCall($RetType, $Address, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Address) Local $Ret Switch @NumParams Case 2 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi) Case 4 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1) Case 6 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2) Case 8 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3) Case 10 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4) Case 12 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5) Case Else Local $DllCallStr = 'DllCall($_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1 For $i = 4 To @NumParams Step 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n $n += 1 Next $DllCallStr &= ')' $Ret = Execute($DllCallStr) EndSwitch Return SetError(@error, 0, $Ret) EndFunc ;==>MemoryFuncCall Func MemoryFuncInit() Local $KernelHandle = API_LoadLibrary('kernel32.dll') API_FreeLibrary($KernelHandle) Local $HookPtr = API_GetProcAddress($KernelHandle, $_MFHookApi) Local $HookSize = 7 + @AutoItX64 * 5 $_MFHookPtr = $HookPtr $_MFHookBak = DllStructCreate('byte[' & $HookSize & ']') If Not API_VirtualProtect($_MFHookPtr, $HookSize, $PAGE_EXECUTE_READWRITE) Then Return False DllStructSetData($_MFHookBak, 1, Peek('byte[' & $HookSize & ']', $_MFHookPtr)) If @AutoItX64 Then Poke('word', $_MFHookPtr, 0xB848) Poke('word', $_MFHookPtr + 10, 0xE0FF) Else Poke('byte', $_MFHookPtr, 0xB8) Poke('word', $_MFHookPtr + 5, 0xE0FF) EndIf Return True EndFunc ;==>MemoryFuncInit Func Peek($Type, $Ptr) If $Type = 'str' Then $Type = 'char[' & API_lstrlenA($Ptr) & ']' ElseIf $Type = 'wstr' Then $Type = 'wchar[' & API_lstrlenW($Ptr) & ']' EndIf Return DllStructGetData(DllStructCreate($Type, $Ptr), 1) EndFunc ;==>Peek Func Poke($Type, $Ptr, $Value) If $Type = 'str' Then $Type = 'char[' & (StringLen($Value) + 1) & ']' ElseIf $Type = 'wstr' Then $Type = 'wchar[' & (StringLen($Value) + 1) & ']' EndIf DllStructSetData(DllStructCreate($Type, $Ptr), 1, $Value) EndFunc ;==>Poke #EndRegion  
       
      Download 7-Zip archive for the UDF, DLLs and examples:  WebP v0.3.1 build 2022-06-18 beta.7z
       
    • By UEZ
      As already annouced in >this topic here the GUI version of the GDI+ v1.1 color effects.
       

       
      GDI+ Color Transformer.au3:
       
      ;IMPORTANT: You are not allowed to sell this code or just parts of it in a commercial project or modify it and distribute it with a different name! ;Distributing copies of the program in compiled pe format (exe) must be free of any fee! ;~ #AutoIt3Wrapper_AutoIt3Dir=c:\Program Files (x86)\AutoIt3\3.3.8.1\ ;~ #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #AutoIt3Wrapper_UseX64=n #AutoIt3Wrapper_Icon=Color_32x32.ico #AutoIt3Wrapper_Res_Field=CompanyName|UEZ Software Development #AutoIt3Wrapper_Res_Field=ProductName|GDI+ Color Transformer #AutoIt3Wrapper_Res_Field=ProductVersion|%AutoItVer% #AutoIt3Wrapper_Res_Fileversion=0.9.7.0 #AutoIt3Wrapper_Res_Field=Build|2016-04-23 #AutoIt3Wrapper_Res_LegalCopyright=UEZ Software Development #AutoIt3Wrapper_Res_Language=1033 #AutoIt3Wrapper_Res_Field=URL|http://www.autoitscript.com/forum/index.php?showtopic=151155 #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #AutoIt3Wrapper_UseUpx=n #AutoIt3Wrapper_UPX_Parameters=--best --lzma #include <Clipboard.au3> #include <Constants.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <GUIMenu.au3> #include <Misc.au3> #include <SliderConstants.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> Global $iResult = _GDIPlus_Startup() If @error Then If @error = 2 Or @extended < 6 Then Global $sUrl = "http://www.winsxs.org/?OtherTech/thread-13-1-1" Global $iChoice = MsgBox(4 + 16 + 262144, "Error", _ "GDIPlus.dll v1.1 is needed to run this script properly!" & @CRLF & _ "How to use GDI+ v1.1 e.g. on WinXP: " & $sUrl & @CRLF & @CRLF & "Open site with default browser?") If $iChoice = 6 Then ShellExecute($sUrl) Exit Else Exit MsgBox(16 + 262144, "Error", "Cannot initialize GDI+", 120) Endif EndIf Global Const $ghGDIPDll = $__g_hGDIPDll DllCall("Kernel32.dll", "long", "SetProcessDEPPolicy", "long", False) ;disable DEP for this process Global $tRECTF = DllStructCreate($tagGDIPRECTF) DllStructSetData($tRECTF, "X", 0) DllStructSetData($tRECTF, "Y", 0) Global Enum $iAdjustExposure = 0, $iAdjustDensity, $iAdjustContrast, $iAdjustHighlight, $iAdjustShadow, _ ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms534098(v=vs.85).aspx $iAdjustMidtone, $iAdjustWhiteSaturation, $iAdjustBlackSaturation Global Enum $iCurveChannelAll = 0, $iCurveChannelRed, $iCurveChannelGreen, $iCurveChannelBlue ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms534100(v=vs.85).aspx Global $iType = $iAdjustExposure, $iChannel = $iCurveChannelAll Global $bUpdatePreview = False Global $hGUI = GUICreate("GDI+ Color Transformer by UEZ v0.9.7 build 2016-04-23", 1200, 690, -1, -1, Default, $WS_EX_TOPMOST + $WS_EX_ACCEPTFILES) GUISetFont(12, 400, 0, "Times New Roman") GUISetBkColor(0xFFFFFF, $hGUI) Global $iTab = GUICtrlCreateTab(824, 232, 369, 393, $TCS_MULTILINE, $TCS_EX_FLATSEPARATORS) Global $iSlider_BWThreshold_Default = 50, $iSlider_BlurRadius_Default = 0, $iSlider_BCBrightness_Default = 0, $iSlider_BCContrast_Default = 0, _ $iSlider_CBCyanRed_Default = 0, $iSlider_CBMagentaGreen_Default = 0, $iSlider_CBYellowBlue_Default = 0, _ $iSlider_CMRed_Default = 100, $iSlider_CMGreen_Default = 100, $iSlider_CMBlue_Default = 100, $iSlider_SharpenRadius_Default = 0, $iSlider_SharpenAmount_Default = 0, _ $iSlider_HSLLightnLevel_Default = 0, $iSlider_HSLHueLevel_Default = 0, $iSlider_HSLSatLevel_Default = 0, _ $iSlider_LevelsShadow_Default = 0, $iSlider_LevelsHighlight_Default = 100, $iSlider_LevelsMidtone_Default = 0, _ $iSlider_TintHue_Default = 0, $iSlider_TintAmount_Default = 0, _ $iSlider_GSLumRed_Default = 31, $iSlider_GSLumGreen_Default = 61, $iSlider_GSLumBlue_Default = 8 Global $GDIP__RLUM = $iSlider_GSLumRed_Default / 100, $GDIP__GLUM = $iSlider_GSLumGreen_Default / 100, $GDIP__BLUM = $iSlider_GSLumBlue_Default / 100; ; Colors luminace Global $iTabSelection = 0, $iBGDefColor = 0xFFFFFF #Region Tabs #Region B/W Global $iBW = GUICtrlCreateTabItem("Black / White") Global $iLabel_BWThreshold = GUICtrlCreateLabel("Threshold", 837, 411, 93, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_BWThreshold = GUICtrlCreateSlider(837, 443, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_BWThreshold_Default) GUICtrlSetTip(-1, "Range is from 0 to 1") Global $hSlider_BWThreshold = GUICtrlGetHandle($iSlider_BWThreshold) Global $iInp_BWThreshold = GUICtrlCreateInput(StringFormat("%04.2f", $iSlider_BWThreshold_Default / 100), 1126, 455, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion B/W #Region Blur Global $iBlur = GUICtrlCreateTabItem("Blur") ;~ GUICtrlSetState(-1, $GUI_SHOW) Global $iCheckbox_BlurExpandEdge = GUICtrlCreateCheckbox("Expand Edge", 838, 381, 177, 25) GUICtrlSetFont(-1, 12, 400, 0, "Arial") GUICtrlSetTip(-1, "If set, the bitmap expands by an amount equal to the radius so that it can have soft edges." & @CRLF & _ "the bitmap remains the same size and the soft edges are clipped.") Global $iLabel_BlurRadius = GUICtrlCreateLabel("Radius", 838, 445, 64, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_BlurRadius = GUICtrlCreateSlider(838, 477, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 255, 0) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetTip(-1, "Range is from 0 to 255") GUICtrlSetData(-1, $iSlider_BlurRadius_Default) Global $hSlider_BlurRadius = GUICtrlGetHandle($iSlider_BlurRadius) Global $iInp_BlurRadius = GUICtrlCreateInput($iSlider_BlurRadius_Default, 1126, 489, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion Blur #Region BC Global $iBC = GUICtrlCreateTabItem("Brightness / Contrast") Global $iLabel_BCBrightness = GUICtrlCreateLabel("Brightness", 838, 377, 99, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_BCBrightness = GUICtrlCreateSlider(838, 409, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 255, -255) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetTip(-1, "Range is from -255 to 255") GUICtrlSetData(-1, $iSlider_BCBrightness_Default) Global $hSlider_BCBrightness = GUICtrlGetHandle($iSlider_BCBrightness) Global $iInp_BCBrightness = GUICtrlCreateInput($iSlider_BCBrightness_Default, 1126, 421, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_BCContrast = GUICtrlCreateLabel("Contrast", 838, 504, 80, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_BCContrast = GUICtrlCreateSlider(838, 541, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetTip(-1, "Range is from -100 to 100") GUICtrlSetData(-1, $iSlider_BCContrast_Default) Global $hSlider_BCContrast = GUICtrlGetHandle($iSlider_BCContrast) Global $iInp_BCContrast = GUICtrlCreateInput($iSlider_BCContrast_Default, 1126, 553, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion BC #Region CB Global $iCB = GUICtrlCreateTabItem("Color Balance") Global $iLabel_CBCyanRed = GUICtrlCreateLabel("Cyan Red", 838, 355, 87, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_CBCyanRed = GUICtrlCreateSlider(838, 387, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetData(-1, $iSlider_CBCyanRed_Default) GUICtrlSetTip(-1, "Range is from -100 to 100") Global $hSlider_CBCyanRed = GUICtrlGetHandle($iSlider_CBCyanRed) Global $iInp_CBCyanRed = GUICtrlCreateInput($iSlider_CBCyanRed_Default, 1126, 399, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_CBMagentaGreen = GUICtrlCreateLabel("Magenta Green", 838, 445, 139, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_CBMagentaGreen = GUICtrlCreateSlider(838, 477, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetData(-1, $iSlider_CBMagentaGreen_Default) GUICtrlSetTip(-1, "Range is from -100 to 100") Global $hSlider_CBMagentaGreen = GUICtrlGetHandle($iSlider_CBMagentaGreen) Global $iInp_CBMagentaGreen = GUICtrlCreateInput($iSlider_CBMagentaGreen_Default, 1126, 489, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_CBYellowBlue = GUICtrlCreateLabel("Yellow Blue", 838, 535, 107, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_CBYellowBlue = GUICtrlCreateSlider(838, 567, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetData(-1, $iSlider_CBYellowBlue_Default) GUICtrlSetTip(-1, "Range is from -100 to 100") Global $hSlider_CBYellowBlue = GUICtrlGetHandle($iSlider_CBYellowBlue) Global $iInp_CBYellowBlue = GUICtrlCreateInput($iSlider_CBYellowBlue_Default, 1126, 579, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion CB #Region CC Global $iCC = GUICtrlCreateTabItem("Color Curve") Global $iLabel_CCCurveAdjust = GUICtrlCreateLabel("Curve Adjustments", 838, 355, 171, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlCreateGroup("", 0, 0, 0, 0) Global $iRadio_CCExposure = GUICtrlCreateRadio("Exposure", 837, 387, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") GUICtrlSetState(-1, $GUI_CHECKED) Global $iRadio_CCDensity = GUICtrlCreateRadio("Density", 927, 387, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iRadio_CCContrast = GUICtrlCreateRadio("Contrast", 1017, 387, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iRadio_CCHighlight = GUICtrlCreateRadio("Highlight", 1107, 387, 65, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iRadio_CCShadow = GUICtrlCreateRadio("Shadow", 837, 411, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iRadio_CCMidtone = GUICtrlCreateRadio("Midtone", 927, 411, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iRadio_CCWhiteSaturation = GUICtrlCreateRadio("White Satur.", 1017, 411, 81, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iRadio_CCBlackSaturation = GUICtrlCreateRadio("Black Satur.", 1107, 411, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iLabel_CCCurveChannel = GUICtrlCreateLabel("Curve Channel", 838, 445, 132, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlCreateGroup("", -99, -99, 1, 1) GUICtrlCreateGroup("", 0, 0, 0, 0) Global $iRadio_CCCurveAllChannel = GUICtrlCreateRadio("All Channel", 837, 477, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") GUICtrlSetState(-1, $GUI_CHECKED) Global $iRadio_CCCurveRed = GUICtrlCreateRadio("Red", 927, 477, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iRadio_CCCurveGreen = GUICtrlCreateRadio("Green", 1017, 477, 73, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") Global $iRadio_CCCurveBlue = GUICtrlCreateRadio("Blue", 1107, 477, 65, 17) GUICtrlSetFont(-1, 8, 400, 0, "Arial") GUICtrlCreateGroup("", -99, -99, 1, 1) Global $iLabel_CCValue = GUICtrlCreateLabel("Value", 838, 535, 54, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_CCValue = GUICtrlCreateSlider(838, 567, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 255, -255) GUICtrlSetData(-1, 0) GUICtrlSetTip(-1, "Range is from -255 to 255") Global $hSlider_CCValue = GUICtrlGetHandle($iSlider_CCValue) Global $iInp_CCValue = GUICtrlCreateInput(0, 1126, 579, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion CC #Region CLUT Global $iCL = GUICtrlCreateTabItem("Color LUT") Global $iLabel_CLUT = GUICtrlCreateLabel("Coming soon!", 838, 425, 340, 60) GUICtrlSetFont(-1, 34, 400, 0, "Arial Black", 4) GUICtrlSetBkColor(-1, 0xFFFFFF) #EndRegion CLUT #Region CM Global $iCM = GUICtrlCreateTabItem("Color Matrix") Global $iLabel_CMRed = GUICtrlCreateLabel("Red", 838, 355, 38, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_CMRed = GUICtrlCreateSlider(838, 387, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_CMRed_Default) GUICtrlSetTip(-1, "Range is from 0 to 1") Global $hSlider_CMRed = GUICtrlGetHandle($iSlider_CMRed) Global $iInp_CMRed = GUICtrlCreateInput(StringFormat("%04.2f", $iSlider_CMRed_Default / 100), 1126, 399, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_CMGreen = GUICtrlCreateLabel("Green", 838, 445, 57, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_CMGreen = GUICtrlCreateSlider(838, 477, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_CMGreen_Default) GUICtrlSetTip(-1, "Range is from 0 to 1") Global $hSlider_CMGreen = GUICtrlGetHandle($iSlider_CMGreen) Global $iInp_CMGreen = GUICtrlCreateInput(StringFormat("%04.2f", $iSlider_CMGreen_Default / 100), 1126, 489, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_CMBlue = GUICtrlCreateLabel("Blue", 838, 535, 43, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_CMBlue = GUICtrlCreateSlider(838, 567, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_CMBlue_Default) GUICtrlSetTip(-1, "Range is from 0 to 1") Global $hSlider_CMBlue = GUICtrlGetHandle($iSlider_CMBlue) Global $iInp_CMBlue = GUICtrlCreateInput(StringFormat("%04.2f", $iSlider_CMBlue_Default / 100), 1126, 579, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion CM #Region Greyscale Global $iGreyscale = GUICtrlCreateTabItem("Greyscale") Global $iLabel_GSLumRed = GUICtrlCreateLabel("Luminance Red", 838, 355, 138, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_GSLumRed = GUICtrlCreateSlider(838, 387, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_GSLumRed_Default) GUICtrlSetTip(-1, "Range is from 0 to 1") Global $hSlider_GSLumRed = GUICtrlGetHandle($iSlider_GSLumRed) Global $iInp_GSLumRed = GUICtrlCreateInput(StringFormat("%04.2f", $iSlider_GSLumRed_Default / 100), 1126, 399, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_GSLumGreen = GUICtrlCreateLabel("Luminance Green", 838, 445, 157, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_GSLumGreen = GUICtrlCreateSlider(838, 477, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_GSLumGreen_Default) GUICtrlSetTip(-1, "Range is from 0 to 1") Global $hSlider_GSLumGreen = GUICtrlGetHandle($iSlider_GSLumGreen) Global $iInp_GSLumGreen = GUICtrlCreateInput(StringFormat("%04.2f", $iSlider_GSLumGreen_Default / 100), 1126, 489, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_GSLumBlue = GUICtrlCreateLabel("Luminance Blue", 838, 535, 143, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_GSLumBlue = GUICtrlCreateSlider(838, 567, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_GSLumBlue_Default) GUICtrlSetTip(-1, "Range is from 0 to 1") Global $hSlider_GSLumBlue = GUICtrlGetHandle($iSlider_GSLumBlue) Global $iInp_GSLumBlue = GUICtrlCreateInput(StringFormat("%04.2f", $iSlider_GSLumBlue_Default / 100), 1126, 579, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion Greyscale #Region HSL Global $iHSL = GUICtrlCreateTabItem("Hue / Sat. / Lightn.") Global $iLabel_HSLHueLevel = GUICtrlCreateLabel("Hue Level", 838, 355, 92, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_HSLHueLevel = GUICtrlCreateSlider(838, 387, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 180, -180) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetData(-1, $iSlider_HSLHueLevel_Default) GUICtrlSetTip(-1, "Range is from -180 to 180") Global $hSlider_HSLHueLevel = GUICtrlGetHandle($iSlider_HSLHueLevel) Global $iInp_HSLHueLevel = GUICtrlCreateInput($iSlider_HSLHueLevel_Default, 1126, 399, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_HSLSatLevel = GUICtrlCreateLabel("Saturation Level", 838, 445, 150, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_HSLSatLevel = GUICtrlCreateSlider(838, 477, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetData(-1, $iSlider_HSLSatLevel_Default) GUICtrlSetTip(-1, "Range is from -100 to 100") Global $hSlider_HSLSatLevel = GUICtrlGetHandle($iSlider_HSLSatLevel) Global $iInp_HSLSatLevel = GUICtrlCreateInput($iSlider_HSLSatLevel_Default, 1126, 489, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_HSLLightnLevel = GUICtrlCreateLabel("Lightness Level", 838, 535, 144, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_HSLLightnLevel = GUICtrlCreateSlider(838, 567, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetData(-1, $iSlider_HSLLightnLevel_Default) GUICtrlSetTip(-1, "Range is from -100 to 100") Global $hSlider_HSLLightnLevel = GUICtrlGetHandle($iSlider_HSLLightnLevel) Global $iInp_HSLLightnLevel = GUICtrlCreateInput($iSlider_HSLLightnLevel_Default, 1126, 579, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion HSL #Region Levels Global $iLevels = GUICtrlCreateTabItem("Levels") Global $iLabel_LevelsHighlight = GUICtrlCreateLabel("Highlight", 838, 355, 83, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_LevelsHighlight = GUICtrlCreateSlider(838, 387, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_LevelsHighlight_Default) GUICtrlSetTip(-1, "Range is from 0 to 100") Global $hSlider_LevelsHighlight = GUICtrlGetHandle($iSlider_LevelsHighlight) Global $iInp_LevelsHighlight = GUICtrlCreateInput($iSlider_LevelsHighlight_Default, 1126, 399, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_LevelsMidtone = GUICtrlCreateLabel("Midtone", 838, 445, 75, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_LevelsMidtone = GUICtrlCreateSlider(838, 477, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetData(-1, $iSlider_LevelsMidtone_Default) GUICtrlSetTip(-1, "Range is from -100 to 100") Global $hSlider_LevelsMidtone = GUICtrlGetHandle($iSlider_LevelsMidtone) Global $iInp_LevelsMidtone = GUICtrlCreateInput($iSlider_LevelsMidtone_Default, 1126, 489, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_LevelsShadow = GUICtrlCreateLabel("Shadow", 838, 535, 75, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_LevelsShadow = GUICtrlCreateSlider(838, 567, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_LevelsShadow_Default) GUICtrlSetTip(-1, "Range is from 0 to 100") Global $hSlider_LevelsShadow = GUICtrlGetHandle($iSlider_LevelsShadow) Global $iInp_LevelsShadow = GUICtrlCreateInput($iSlider_LevelsShadow_Default, 1126, 579, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion Levels #Region Negative Global $iNegative = GUICtrlCreateTabItem("Negative") Global $iLabel_Negative = GUICtrlCreateLabel("Nothing to configure", 838, 445, 340, 60) GUICtrlSetFont(-1, 23, 400, 0, "Arial Black", 4) GUICtrlSetBkColor(-1, 0xFFFFFF) #EndRegion Negative #Region Sharpen Global $iSharpen = GUICtrlCreateTabItem("Sharpen") Global $iLabel_SharpenRadius = GUICtrlCreateLabel("Radius", 838, 377, 64, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_SharpenRadius = GUICtrlCreateSlider(838, 409, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 255, 0) GUICtrlSetData(-1, $iSlider_SharpenRadius_Default) GUICtrlSetTip(-1, "Range is from 0 to 255") Global $hSlider_SharpenRadius = GUICtrlGetHandle($iSlider_SharpenRadius) Global $iInp_SharpenRadius = GUICtrlCreateInput($iSlider_SharpenRadius_Default, 1126, 421, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabelSharpenAmount = GUICtrlCreateLabel("Amount", 838, 504, 72, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_SharpenAmount = GUICtrlCreateSlider(838, 541, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, 0) GUICtrlSetData(-1, $iSlider_SharpenAmount_Default) GUICtrlSetTip(-1, "Range is from 0 to 100") Global $hSlider_SharpenAmount = GUICtrlGetHandle($iSlider_SharpenAmount) Global $iInp_SharpenAmount = GUICtrlCreateInput($iSlider_SharpenAmount_Default, 1126, 553, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion Sharpen #Region Tint Global $iTint = GUICtrlCreateTabItem("Tint") ;~ GUICtrlSetState(-1, $GUI_SHOW) Global $iLabel_TintHue = GUICtrlCreateLabel("Hue", 838, 377, 39, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_TintHue = GUICtrlCreateSlider(838, 409, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 180, -180) GUICtrlSetData(-1, $iSlider_TintHue_Default) GUICtrlSetTip(-1, "Range is from -180 to 180") Global $hSlider_TintHue = GUICtrlGetHandle($iSlider_TintHue) Global $iInp_TintHue = GUICtrlCreateInput($iSlider_TintHue_Default, 1126, 421, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) Global $iLabel_TintAmount = GUICtrlCreateLabel("Amount", 838, 504, 72, 27) GUICtrlSetFont(-1, 12, 400, 0, "Arial Black") GUICtrlSetBkColor(-1, 0xFFFFFF) Global $iSlider_TintAmount = GUICtrlCreateSlider(838, 541, 278, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE)) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetLimit(-1, 100, -100) GUICtrlSetData(-1, $iSlider_TintAmount_Default) GUICtrlSetTip(-1, "Range is from -100 to 100") Global $hSlider_TintAmount = GUICtrlGetHandle($iSlider_TintAmount) Global $iInp_TintAmount = GUICtrlCreateInput($iSlider_TintAmount_Default, 1126, 553, 49, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER, $ES_READONLY)) #EndRegion Tint GUICtrlCreateTabItem("") #EndRegion Tabs ;~ Global Const $STM_SETIMAGE = 0x0172; $IMAGE_BITMAP = 0 Global $hTmp = _GDIPlus_BitmapCreateFromMemory(_Logo(), True) Global $iPicLogo = GUICtrlCreatePic("", 8, 8, 1184, 196, BitOR($SS_CENTERIMAGE, $GUI_SS_DEFAULT_PIC, $WS_BORDER)) Global $hB = GUICtrlSendMsg($iPicLogo, $STM_SETIMAGE, $IMAGE_BITMAP, $hTmp) If $hB Then _WinAPI_DeleteObject($hB) _WinAPI_DeleteObject($hTmp) Global $iW_Prev = 800, $iH_Prev = 450 Global $iPicPreview = GUICtrlCreatePic("", 8, 232, $iW_Prev, $iH_Prev, BitOR($GUI_SS_DEFAULT_PIC, $WS_BORDER, $SS_CENTERIMAGE)) Global $hPicPreview = GUICtrlGetHandle($iPicPreview) Global $iBtnSave = GUICtrlCreateButton("&Save Image", 1117, 634, 75, 49, $BS_MULTILINE) GUICtrlSetState(-1, $GUI_DISABLE) GUICtrlSetTip(-1, "Press right mouse buttom to copy image to clipboard") Global $iBtnLoad = GUICtrlCreateButton("&Load Image", 1036, 634, 75, 49, $BS_MULTILINE) Global $iBtnApply = GUICtrlCreateButton("&Apply Effect", 825, 634, 75, 49, $BS_MULTILINE) GUICtrlSetState(-1, $GUI_DISABLE) Global $iBtnUndo = GUICtrlCreateButton("&Undo Effect", 905, 634, 75, 49, $BS_MULTILINE) GUICtrlSetState(-1, $GUI_DISABLE) Global $iLabelImg = GUICtrlCreateLabel(" Image Info:", 8, 214, 68, 16) GUICtrlSetFont(-1, 10, 400, 0, "Times New Roman", 4) GUICtrlSetColor(-1, 0xF0F0F0) GUICtrlSetBkColor(-1, 0x0) Global $i, $j = 89, $k = 256 For $i = 0 To 731 ;76 + 732 GUICtrlCreateLabel("", 76 + $i, 214, 1, 16) GUICtrlSetBkColor(-1, 0x10000 * Int($j * $i / $k) + 0x100 * Int($j * $i / $k) + Int($j * $i / $k)) Next Global $iLabelImgInfo = GUICtrlCreateLabel(" no image loaded", 76, 214, 732, 16) GUICtrlSetFont(-1, 10, 400, 0, "Times New Roman", 5) GUICtrlSetColor(-1, 0xB0F0B0) GUICtrlSetBkColor(-1, -2) Global $iLabel_BgColor = GUICtrlCreateLabel("Bg Color", 984, 634, 47, 19) GUICtrlSetFont(-1, 9, 400, 0, "Times New Roman") GUICtrlSetBkColor(-1, -2) Global $iBtnBgColor = GUICtrlCreateButton("", 992, 654, 32, 28, $WS_BORDER) GUICtrlSetBkColor(-1, $iBGDefColor) GUICtrlSetTip(-1, "Change image background color (used also for save format)." & @CRLF & "PNG file format is excluded by background color") Global Enum $iReset = 0x400, $iClipboard Global $hQMenu = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_InsertMenuItem($hQMenu, 0, "Reset to default", $iReset) $hTmp = _GDIPlus_BitmapCreateFromMemory(Reset_Icon()) Global $hBmp_Reset = _GDIPlus_Convert2HBitmap($hTmp, $COLOR_MENU) _GUICtrlMenu_SetItemBmp($hQMenu, 0, $hBmp_Reset) _GDIPlus_BitmapDispose($hTmp) Global $hQMenu2 = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_InsertMenuItem($hQMenu2, 0, "Copy image to clipboard", $iClipboard) Global $hBmp_Clipboard = _GDIPlus_BitmapCreateFromMemory(_Clipboard(), True) _GUICtrlMenu_SetItemBmp($hQMenu2, 0, $hBmp_Clipboard) GUISetState(@SW_SHOW) Global $hDLL_GDI32 = DllOpen("gdi32.dll") Global $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iW_Prev, "int", $iH_Prev, "int", 0, "int", $GDIP_PXF32ARGB, "ptr", 0, "int*", 0) Global $hHBitmap_Preview = _GDIPlus_BitmapCreateHBITMAPFromBitmap($aResult[6]) _GDIPlus_BitmapDispose($aResult[6]) Global $hDC = _WinAPI_GetWindowDC($hPicPreview) Global $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Global $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap_Preview) Global $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsClear($hGraphic, 0xFF000000 + $iBGDefColor) Global $tGUID = DllStructCreate($tagGUID) Global $hImage = 0, $hImage_tmp, $hBmp_Preview = 0, $hBmp_tmp = 0, $hBmp_Save = 0, $hBmp_Save_1bpp = 0, $hCtx_tmp, $hBmp_Undo, $hBmp_Empty, _ $iWidth, $iHeight, $aPixelFormat, $aImageRawFormat, $hEffect, $aAnim, $sPrefix, $sFile, $iBGColor = $iBGDefColor, _ $bDnD = False, $bStart = False, $bDrawFX = False, $t, $iOld GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL") GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUIRegisterMsg($WM_PAINT, "WM_PAINT") GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES") GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU") GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUIRegisterMsg($WM_HSCROLL, "") GUIRegisterMsg($WM_NOTIFY, "") GUIRegisterMsg($WM_PAINT, "") GUIRegisterMsg($WM_DROPFILES, "") GUIRegisterMsg($WM_CONTEXTMENU, "") GUIRegisterMsg($WM_COMMAND, "") If $hBmp_tmp Then _GDIPlus_GraphicsDispose($hCtx_tmp) _GDIPlus_BitmapDispose($hBmp_tmp) EndIf _WinAPI_DeleteObject($hBmp_Reset) _WinAPI_DeleteObject($hBmp_Clipboard) _GDIPlus_GraphicsDispose($hGraphic) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteObject($hHBitmap_Preview) _WinAPI_ReleaseDC($hPicPreview, $hDC) _WinAPI_DeleteDC($hDC) If $hImage Then _GDIPlus_ImageDispose($hImage) GUIDelete() _GDIPlus_Shutdown() DllClose($hDLL_GDI32) Exit Case $iBtnApply If $hBmp_Undo Then _GDIPlus_BitmapDispose($hBmp_Undo) $hBmp_Undo = _GDIPlus_ImageClone($hImage) Switch $iTabSelection Case 0 _GDIPlus_BlackAndWhite($hImage, $hCtx_tmp, GUICtrlRead($iInp_BWThreshold), False) Case 7 _GDIPlus_Greyscale($hImage, $hCtx_tmp, False) EndSwitch _GDIPlus_BitmapDispose($hImage) $hImage = _GDIPlus_ImageClone($hBmp_tmp) $bUpdatePreview = True GUICtrlSetState($iBtnUndo, $GUI_ENABLE) GUICtrlSetState($iBtnSave, $GUI_ENABLE) ResetSettings() Case $iBtnUndo _GDIPlus_BitmapDispose($hImage) $hImage = _GDIPlus_ImageClone($hBmp_Undo) If $hBmp_tmp Then _GDIPlus_GraphicsDispose($hCtx_tmp) _GDIPlus_BitmapDispose($hBmp_tmp) EndIf $hBmp_tmp = _GDIPlus_ImageClone($hImage) $hCtx_tmp = _GDIPlus_ImageGetGraphicsContext($hBmp_tmp) $bUpdatePreview = True Case $iBtnBgColor $t = $iBGColor $iBGColor = _ChooseColor(2, 0xFF0000, 2, $hGUI) If @error Then $iBGColor = $t _GDIPlus_GraphicsClear($hGraphic, 0xFF000000 + $iBGColor) GUICtrlSetBkColor($iBtnBgColor, $iBGColor) $bUpdatePreview = True Case $iBtnLoad If Not $bDnD Then $sFile = FileOpenDialog("Load an image", "", "Images (*.jpg;*.bmp;*.png;*.gif;*.tif)|All (*.*)", 3, "", $hGUI) If @error Then ContinueLoop EndIf If $hImage Then _GDIPlus_ImageDispose($hImage) $hImage = _GDIPlus_ImageLoadFromFile($sFile) If Not $hImage Then ContinueLoop $iWidth = _GDIPlus_ImageGetWidth($hImage) $iHeight = _GDIPlus_ImageGetHeight($hImage) $aAnim = DllCall($ghGDIPDll, "uint", "GdipImageGetFrameDimensionsCount", "handle", $hImage, "int*", 0) DllCall($ghGDIPDll, "uint", "GdipImageGetFrameDimensionsList", "handle", $hImage, "struct*", $tGUID, "int", $aAnim[2]) $aAnim = DllCall($ghGDIPDll, "uint", "GdipImageGetFrameCount", "handle", $hImage, "struct*", $tGUID, "uint*", 0) $aPixelFormat = _GDIPlus_ImageGetPixelFormat($hImage) $aImageRawFormat = _GDIPlus_ImageGetRawFormat($hImage) $sPrefix = "" If $aAnim[3] > 1 Then $sPrefix = "animated " ;~ CopyImage2Gfx($hImage, $hGraphic, $hDC, $hDC_backbuffer, $iWidth, $iHeight) GUICtrlSetData($iLabelImgInfo, StringRegExpReplace($sFile, ".*\\(.*)", "$1") & ", " & $sPrefix & $aImageRawFormat[1] & ", " & $iWidth & "x" & $iHeight & ", " & $aPixelFormat[1] & ", " & Round(FileGetSize($sFile) / 1024, 2) & " kb") $bDnD = False $bStart = True $bUpdatePreview = True DllStructSetData($tRECTF, "Width", $iWidth) DllStructSetData($tRECTF, "Height", $iHeight) If $hBmp_tmp Then _GDIPlus_GraphicsDispose($hCtx_tmp) _GDIPlus_BitmapDispose($hBmp_tmp) EndIf $hBmp_tmp = _GDIPlus_ImageClone($hImage) $hCtx_tmp = _GDIPlus_ImageGetGraphicsContext($hBmp_tmp) GUICtrlSetState($iBtnApply, $GUI_ENABLE) If $hBmp_Undo Then _GDIPlus_BitmapDispose($hBmp_Undo) $hBmp_Undo = _GDIPlus_ImageClone($hImage) If $hBmp_Empty Then _GDIPlus_BitmapDispose($hBmp_Empty) $hBmp_Empty = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight) $iOld = $iTabSelection For $iTabSelection = 0 To 12 ResetSettings() Next $iTabSelection = $iOld Case $iBtnSave $sFile = FileSaveDialog("Save Image", "", "Image (*.png;*.jpg;*.bmp;*.gif;*.tif)", 2, "", $hGUI) If @error Then ContinueLoop If $hBmp_tmp Then _GDIPlus_GraphicsDispose($hCtx_tmp) _GDIPlus_BitmapDispose($hBmp_tmp) EndIf $hBmp_tmp = _GDIPlus_ImageClone($hBmp_Empty) $hCtx_tmp = _GDIPlus_ImageGetGraphicsContext($hBmp_tmp) DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hCtx_tmp, "int", 7) Switch $iTabSelection Case 0 ;Black & White DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hCtx_tmp, "int", 5) _GDIPlus_BlackAndWhite($hImage, $hCtx_tmp, GUICtrlRead($iInp_BWThreshold), False) Case 1 ;Blur $hEffect = _GDIPlus_EffectCreateBlur(GUICtrlRead($iInp_BlurRadius), BitAND(GUICtrlRead($iCheckbox_BlurExpandEdge), $GUI_CHECKED)) Case 2 ;Brightness / Contrast $hEffect = _GDIPlus_EffectCreateBrightnessContrast(GUICtrlRead($iInp_BCBrightness), GUICtrlRead($iInp_BCContrast)) Case 3 ;Color Balance $hEffect = _GDIPlus_EffectCreateColorBalance(GUICtrlRead($iInp_CBCyanRed), GUICtrlRead($iInp_CBMagentaGreen), GUICtrlRead($iInp_CBYellowBlue)) Case 4 ;Color Curve $hEffect = _GDIPlus_EffectCreateColorCurve($iType, $iChannel, GUICtrlRead($iInp_CCValue)) Case 5 ;Color LUT Case 6 ;Color Matrix Local $tColorMatrix = DllStructCreate($tagGDIPCOLORMATRIX) DllStructSetData($tColorMatrix, "m", GUICtrlRead($iInp_CMRed), 1) DllStructSetData($tColorMatrix, "m", GUICtrlRead($iInp_CMGreen), 7) DllStructSetData($tColorMatrix, "m", GUICtrlRead($iInp_CMBlue), 13) DllStructSetData($tColorMatrix, "m", 1, 19) DllStructSetData($tColorMatrix, "m", 1, 25) $hEffect = _GDIPlus_EffectCreateColorMatrix($tColorMatrix) Case 7 ;Greyscale _GDIPlus_Greyscale($hImage, $hCtx_tmp, False) Case 8 ;Hue / Saturation / Lightness $hEffect = _GDIPlus_EffectCreateHueSaturationLightness(GUICtrlRead($iInp_HSLHueLevel), GUICtrlRead($iInp_HSLSatLevel), GUICtrlRead($iInp_HSLLightnLevel)) Case 9 ;Levels $hEffect = _GDIPlus_EffectCreateLevels(GUICtrlRead($iInp_LevelsHighlight), GUICtrlRead($iInp_LevelsMidtone), GUICtrlRead($iInp_LevelsShadow)) Case 10;Negative _GDIPlus_Negative($hImage, $hCtx_tmp) Case 11;Sharpen $hEffect = _GDIPlus_EffectCreateSharpen(GUICtrlRead($iInp_SharpenRadius), GUICtrlRead($iInp_SharpenAmount)) Case 12;Tint $hEffect = _GDIPlus_EffectCreateTint(GUICtrlRead($iInp_TintHue), GUICtrlRead($iInp_TintAmount)) EndSwitch If $iTabSelection <> 0 And $iTabSelection <> 7 Then _GDIPlus_BitmapApplyEffect($hImage, $hEffect) _GDIPlus_EffectDispose($hEffect) EndIf _GDIPlus_SaveBitmap($sFile, $hBmp_tmp, 90, $iBGColor) ;~ Switch _GDIPlus_ImageSaveToFile($hBmp_tmp, $sFile) ;~ Case 0 ;~ MsgBox(16 + 262144, "Error", "Image couldn't be saved!", 20, $hGUI) ;~ Case Else ;~ MsgBox(64 + 262144, "Information", "Image has been successfully saved!", 20, $hGUI) ;~ EndSwitch Case $iRadio_CCExposure, $iRadio_CCDensity GUICtrlSetLimit($iSlider_CCValue, 255, -255) GUICtrlSetData($iSlider_CCValue, 0) GUICtrlSetData($iInp_CCValue, 0) GUICtrlSetTip($iSlider_CCValue, "Range is from -255 to 255") If BitAND(GUICtrlRead($iRadio_CCExposure), $GUI_CHECKED) Then $iType = $iAdjustExposure Else $iType = $iAdjustDensity EndIf $bUpdatePreview = True Case $iRadio_CCBlackSaturation, $iRadio_CCWhiteSaturation If BitAND(GUICtrlRead($iRadio_CCBlackSaturation), $GUI_CHECKED) Then $iType = $iAdjustBlackSaturation GUICtrlSetLimit($iSlider_CCValue, 254, 0) GUICtrlSetData($iSlider_CCValue, 0) GUICtrlSetData($iInp_CCValue, 0) GUICtrlSetTip($iSlider_CCValue, "Range is from 0 to 254") Else $iType = $iAdjustWhiteSaturation GUICtrlSetLimit($iSlider_CCValue, 255, 1) GUICtrlSetData($iSlider_CCValue, 255) GUICtrlSetData($iInp_CCValue, 255) GUICtrlSetTip($iSlider_CCValue, "Range is from 1 to 255") EndIf $bUpdatePreview = True Case $iRadio_CCContrast, $iRadio_CCHighlight, $iRadio_CCShadow, $iRadio_CCMidtone GUICtrlSetLimit($iSlider_CCValue, 100, -100) GUICtrlSetData($iSlider_CCValue, 0) GUICtrlSetData($iInp_CCValue, 0) GUICtrlSetTip($iSlider_CCValue, "Range is from -100 to 100") If BitAND(GUICtrlRead($iRadio_CCBlackSaturation), $GUI_CHECKED) Then $iType = $iAdjustContrast ElseIf BitAND(GUICtrlRead($iRadio_CCHighlight), $GUI_CHECKED) Then $iType = $iAdjustHighlight ElseIf BitAND(GUICtrlRead($iRadio_CCShadow), $GUI_CHECKED) Then $iType = $iAdjustShadow Else $iType = $iAdjustMidtone EndIf $bUpdatePreview = True Case $iRadio_CCCurveAllChannel $iChannel = $iCurveChannelAll $bUpdatePreview = True Case $iRadio_CCCurveRed $iChannel = $iCurveChannelRed $bUpdatePreview = True Case $iRadio_CCCurveGreen $iChannel = $iCurveChannelGreen $bUpdatePreview = True Case $iRadio_CCCurveBlue $iChannel = $iCurveChannelBlue $bUpdatePreview = True Case $iCheckbox_BlurExpandEdge $bUpdatePreview = True Case $iTab Switch GUICtrlRead($iTab) Case 0 ;Black & White $iTabSelection = 0 Case 1 ;Blur $iTabSelection = 1 Case 2 ;Brightness / Contrast $iTabSelection = 2 Case 3 ;Color Balance $iTabSelection = 3 Case 4 ;Color Curve $iTabSelection = 4 Case 5 ;Color LUT $iTabSelection = 5 Case 6 ;Color Matrix $iTabSelection = 6 Case 7 ;Greyscale $iTabSelection = 7 Case 8 ;Hue / Saturation / Lightness $iTabSelection = 8 Case 9 ;Levels $iTabSelection = 9 Case 10;Negative $iTabSelection = 10 Case 11;Sharpen $iTabSelection = 11 Case 12;Tint $iTabSelection = 12 EndSwitch $bUpdatePreview = True EndSwitch If $bUpdatePreview And $bStart Then $bUpdatePreview = False DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hGraphic, "int", 7) $hImage_tmp = _GDIPlus_ImageClone($hImage) Switch $iTabSelection Case 0 ;Black & White DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hGraphic, "int", 5) _GDIPlus_BlackAndWhite($hImage_tmp, $hGraphic, GUICtrlRead($iInp_BWThreshold)) $bDrawFX = False Case 1 ;Blur $hEffect = _GDIPlus_EffectCreateBlur(GUICtrlRead($iInp_BlurRadius), BitAND(GUICtrlRead($iCheckbox_BlurExpandEdge), $GUI_CHECKED)) $bDrawFX = True Case 2 ;Brightness / Contrast $hEffect = _GDIPlus_EffectCreateBrightnessContrast(GUICtrlRead($iInp_BCBrightness), GUICtrlRead($iInp_BCContrast)) $bDrawFX = True Case 3 ;Color Balance $hEffect = _GDIPlus_EffectCreateColorBalance(GUICtrlRead($iInp_CBCyanRed), GUICtrlRead($iInp_CBMagentaGreen), GUICtrlRead($iInp_CBYellowBlue)) $bDrawFX = True Case 4 ;Color Curve $hEffect = _GDIPlus_EffectCreateColorCurve($iType, $iChannel, GUICtrlRead($iInp_CCValue)) $bDrawFX = True Case 5 ;Color LUT $bDrawFX = False Case 6 ;Color Matrix Local $tColorMatrix = DllStructCreate($tagGDIPCOLORMATRIX) DllStructSetData($tColorMatrix, "m", GUICtrlRead($iInp_CMRed), 1) DllStructSetData($tColorMatrix, "m", GUICtrlRead($iInp_CMGreen), 7) DllStructSetData($tColorMatrix, "m", GUICtrlRead($iInp_CMBlue), 13) DllStructSetData($tColorMatrix, "m", 1, 19) DllStructSetData($tColorMatrix, "m", 1, 25) $hEffect = _GDIPlus_EffectCreateColorMatrix($tColorMatrix) $bDrawFX = True Case 7 ;Greyscale _GDIPlus_Greyscale($hImage_tmp, $hGraphic) $bDrawFX = False Case 8 ;Hue / Saturation / Lightness $hEffect = _GDIPlus_EffectCreateHueSaturationLightness(GUICtrlRead($iInp_HSLHueLevel), GUICtrlRead($iInp_HSLSatLevel), GUICtrlRead($iInp_HSLLightnLevel)) $bDrawFX = True Case 9 ;Levels $hEffect = _GDIPlus_EffectCreateLevels(GUICtrlRead($iInp_LevelsHighlight), GUICtrlRead($iInp_LevelsMidtone), GUICtrlRead($iInp_LevelsShadow)) $bDrawFX = True Case 10;Negative _GDIPlus_Negative($hImage_tmp, $hGraphic) $bDrawFX = False Case 11;Sharpen $hEffect = _GDIPlus_EffectCreateSharpen(GUICtrlRead($iInp_SharpenRadius), GUICtrlRead($iInp_SharpenAmount)) $bDrawFX = True Case 12;Tint $hEffect = _GDIPlus_EffectCreateTint(GUICtrlRead($iInp_TintHue), GUICtrlRead($iInp_TintAmount)) $bDrawFX = True EndSwitch If $bDrawFX Then _GDIPlus_GraphicsClear($hCtx_tmp, 0xFF000000 + $iBGColor) _GDIPlus_BitmapApplyEffect($hImage_tmp, $hEffect) _GDIPlus_GraphicsDrawImageRect($hCtx_tmp, $hImage_tmp, 0, 0, $iWidth, $iHeight) _GDIPlus_EffectDispose($hEffect) CopyImage2Gfx($hBmp_tmp, $hGraphic, $hDC, $hDC_backbuffer, $iWidth, $iHeight) Else DllCall($hDLL_GDI32, "bool", "BitBlt", "handle", $hDC, "int", 2, "int", 2, "int", $iW_Prev - 4, "int", $iH_Prev - 4, "handle", $hDC_backbuffer, "int", 0, "int", 0, "dword", $SRCCOPY) EndIf _GDIPlus_ImageDispose($hImage_tmp) EndIf WEnd Func ResetSettings() Switch $iTabSelection Case 0 ;Black & White GUICtrlSetData($iSlider_BWThreshold, $iSlider_BWThreshold_Default) GUICtrlSetData($iInp_BWThreshold, StringFormat("%04.2f", $iSlider_BWThreshold_Default / 100)) $bUpdatePreview = True Case 1 ;Blur GUICtrlSetData($iSlider_BlurRadius, $iSlider_BlurRadius_Default) GUICtrlSetData($iInp_BlurRadius, $iSlider_BlurRadius_Default) GUICtrlSetState($iCheckbox_BlurExpandEdge, $GUI_UNCHECKED) $bUpdatePreview = True Case 2 ;Brightness / Contrast GUICtrlSetData($iSlider_BCBrightness, $iSlider_BCBrightness_Default) GUICtrlSetData($iInp_BCBrightness, $iSlider_BCBrightness_Default) GUICtrlSetData($iSlider_BCContrast, $iSlider_BCContrast_Default) GUICtrlSetData($iInp_BCContrast, $iSlider_BCContrast_Default) $bUpdatePreview = True Case 3 ;Color Balance GUICtrlSetData($iSlider_CBCyanRed, $iSlider_CBCyanRed_Default) GUICtrlSetData($iInp_CBCyanRed, $iSlider_CBCyanRed_Default) GUICtrlSetData($iSlider_CBMagentaGreen, $iSlider_CBMagentaGreen_Default) GUICtrlSetData($iInp_CBMagentaGreen, $iSlider_CBMagentaGreen_Default) GUICtrlSetData($iSlider_CBYellowBlue, $iSlider_CBYellowBlue_Default) GUICtrlSetData($iInp_CBYellowBlue, $iSlider_CBYellowBlue_Default) $bUpdatePreview = True Case 4 ;Color Curve GUICtrlSetData($iSlider_CCValue, 0) GUICtrlSetData($iInp_CCValue, 0) GUICtrlSetState($iRadio_CCExposure, $GUI_CHECKED) GUICtrlSetState($iRadio_CCCurveAllChannel, $GUI_CHECKED) $bUpdatePreview = True Case 5 ;Color LUT ;~ $bUpdatePreview = True Case 6 ;Color Matrix GUICtrlSetData($iSlider_CMRed, $iSlider_CMRed_Default) GUICtrlSetData($iInp_CMRed, StringFormat("%04.2f", $iSlider_CMRed_Default / 100)) GUICtrlSetData($iSlider_CMGreen, $iSlider_CMGreen_Default) GUICtrlSetData($iInp_CMGreen, StringFormat("%04.2f", $iSlider_CMGreen_Default / 100)) GUICtrlSetData($iSlider_CMBlue, $iSlider_CMBlue_Default) GUICtrlSetData($iInp_CMBlue, StringFormat("%04.2f", $iSlider_CMBlue_Default / 100)) $bUpdatePreview = True Case 7 ;Greyscale GUICtrlSetData($iSlider_GSLumRed, $iSlider_GSLumRed_Default) GUICtrlSetData($iInp_GSLumRed, StringFormat("%04.2f", $iSlider_GSLumRed_Default / 100)) GUICtrlSetData($iSlider_GSLumGreen, $iSlider_GSLumGreen_Default) GUICtrlSetData($iInp_GSLumGreen, StringFormat("%04.2f", $iSlider_GSLumGreen_Default / 100)) GUICtrlSetData($iSlider_GSLumBlue, $iSlider_GSLumBlue_Default) GUICtrlSetData($iInp_GSLumBlue, StringFormat("%04.2f", $iSlider_GSLumBlue_Default / 100)) $GDIP__RLUM = $iSlider_GSLumRed_Default / 100 $GDIP__GLUM = $iSlider_GSLumGreen_Default / 100 $GDIP__BLUM = $iSlider_GSLumBlue_Default / 100 $bUpdatePreview = True Case 8 ;Hue / Saturation / Lightness GUICtrlSetData($iSlider_HSLHueLevel, $iSlider_HSLHueLevel_Default) GUICtrlSetData($iInp_HSLHueLevel, $iSlider_HSLHueLevel_Default) GUICtrlSetData($iSlider_HSLSatLevel, $iSlider_HSLSatLevel_Default) GUICtrlSetData($iInp_HSLSatLevel, $iSlider_HSLSatLevel_Default) GUICtrlSetData($iSlider_HSLLightnLevel, $iSlider_HSLLightnLevel_Default) GUICtrlSetData($iInp_HSLLightnLevel, $iSlider_HSLLightnLevel_Default) $bUpdatePreview = True Case 9 ;Levels GUICtrlSetData($iSlider_LevelsHighlight, $iSlider_LevelsHighlight_Default) GUICtrlSetData($iInp_LevelsHighlight, $iSlider_LevelsHighlight_Default) GUICtrlSetData($iSlider_LevelsMidtone, $iSlider_LevelsMidtone_Default) GUICtrlSetData($iInp_LevelsMidtone, $iSlider_LevelsMidtone_Default) GUICtrlSetData($iSlider_LevelsShadow, $iSlider_LevelsShadow_Default) GUICtrlSetData($iInp_LevelsShadow, $iSlider_LevelsShadow_Default) $bUpdatePreview = True Case 10;Negative $bUpdatePreview = True Case 11;Sharpen GUICtrlSetData($iSlider_SharpenRadius, $iSlider_SharpenRadius_Default) GUICtrlSetData($iInp_SharpenRadius, $iSlider_SharpenRadius_Default) GUICtrlSetData($iSlider_SharpenAmount, $iSlider_SharpenAmount_Default) GUICtrlSetData($iInp_SharpenAmount, $iSlider_SharpenAmount_Default) $bUpdatePreview = True Case 12;Tint GUICtrlSetData($iSlider_TintHue, $iSlider_TintHue_Default) GUICtrlSetData($iInp_TintHue, $iSlider_TintHue_Default) GUICtrlSetData($iSlider_TintAmount, $iSlider_TintAmount_Default) GUICtrlSetData($iInp_TintAmount, $iSlider_TintAmount_Default) $bUpdatePreview = True EndSwitch EndFunc ;==>ResetSettings #Region GDI+ FX functions Func _GDIPlus_BlackAndWhite($hBitmap, $hGraphic, $iThreshold, $bUpdate = True) Local Const $hIA = _GDIPlus_ImageAttributesCreate() _GDIPlus_ImageAttributesSetThreshold($hIA, $iThreshold) Local $pBWMatrix = DllStructGetPtr(_GDIPlus_ColorMatrixCreateGrayScale()) _GDIPlus_ImageAttributesSetColorMatrix($hIA, $GDIP_COLORADJUSTTYPE_DEFAULT, True, $pBWMatrix) Local $iW = _GDIPlus_ImageGetWidth($hBitmap), $iH = _GDIPlus_ImageGetHeight($hBitmap) If $bUpdate Then CopyImage2Gfx($hBitmap, $hGraphic, $hDC, $hDC_backbuffer, $iW, $iH, $hIA) Else _GDIPlus_GraphicsClear($hGraphic, 0xFF000000 + $iBGColor) _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hBitmap, 0, 0, $iW, $iH, 0, 0, $iW, $iH, $hIA) EndIf _GDIPlus_ImageAttributesDispose($hIA) EndFunc ;==>_GDIPlus_BlackAndWhite Func _GDIPlus_Greyscale($hBitmap, $hGraphic, $bUpdate = True) Local $ii, $iJ, $tColorMatrix, $aLums[4] = [GUICtrlRead($iInp_GSLumRed), GUICtrlRead($iInp_GSLumGreen), GUICtrlRead($iInp_GSLumBlue), 0] $tColorMatrix = DllStructCreate($tagGDIPCOLORMATRIX) For $ii = 0 To 3 For $iJ = 1 To 3 DllStructSetData($tColorMatrix, "m", $aLums[$ii], $ii * 5 + $iJ) Next Next DllStructSetData($tColorMatrix, "m", 1, 19) DllStructSetData($tColorMatrix, "m", 1, 25) Local Const $hIA = _GDIPlus_ImageAttributesCreate() _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $tColorMatrix) Local $iW = _GDIPlus_ImageGetWidth($hBitmap), $iH = _GDIPlus_ImageGetHeight($hBitmap) If $bUpdate Then CopyImage2Gfx($hBitmap, $hGraphic, $hDC, $hDC_backbuffer, $iW, $iH, $hIA) Else _GDIPlus_GraphicsClear($hGraphic, 0xFF000000 + $iBGColor) _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hBitmap, 0, 0, $iW, $iH, 0, 0, $iW, $iH, $hIA) EndIf _GDIPlus_ImageAttributesDispose($hIA) EndFunc ;==>_GDIPlus_Greyscale Func _GDIPlus_Negative(ByRef $hBitmap, ByRef $hGraphic) Local Const $hIA = _GDIPlus_ImageAttributesCreate() _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, _GDIPlus_ColorMatrixCreateNegative()) CopyImage2Gfx($hBitmap, $hGraphic, $hDC, $hDC_backbuffer, _GDIPlus_ImageGetWidth($hBitmap), _GDIPlus_ImageGetHeight($hBitmap), $hIA) _GDIPlus_ImageAttributesDispose($hIA) EndFunc ;==>_GDIPlus_Negative #EndRegion GDI+ FX functions #Region Message Functions Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $wParam Switch $lParam Case $hSlider_BWThreshold GUICtrlSetData($iInp_BWThreshold, StringFormat("%04.2f", GUICtrlRead($iSlider_BWThreshold) / 100)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_BlurRadius GUICtrlSetData($iInp_BlurRadius, GUICtrlRead($iSlider_BlurRadius)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_BCBrightness GUICtrlSetData($iInp_BCBrightness, GUICtrlRead($iSlider_BCBrightness)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_BCContrast GUICtrlSetData($iInp_BCContrast, GUICtrlRead($iSlider_BCContrast)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_CBCyanRed GUICtrlSetData($iInp_CBCyanRed, GUICtrlRead($iSlider_CBCyanRed)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_CBMagentaGreen GUICtrlSetData($iInp_CBMagentaGreen, GUICtrlRead($iSlider_CBMagentaGreen)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_CBYellowBlue GUICtrlSetData($iInp_CBYellowBlue, GUICtrlRead($iSlider_CBYellowBlue)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_CCValue GUICtrlSetData($iInp_CCValue, GUICtrlRead($iSlider_CCValue)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_CMBlue GUICtrlSetData($iInp_CMBlue, StringFormat("%04.2f", GUICtrlRead($iSlider_CMBlue) / 100)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_CMGreen GUICtrlSetData($iInp_CMGreen, StringFormat("%04.2f", GUICtrlRead($iSlider_CMGreen) / 100)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_CMRed GUICtrlSetData($iInp_CMRed, StringFormat("%04.2f", GUICtrlRead($iSlider_CMRed) / 100)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_GSLumBlue GUICtrlSetData($iInp_GSLumBlue, StringFormat("%04.2f", GUICtrlRead($iSlider_GSLumBlue) / 100)) $GDIP__BLUM = GUICtrlRead($iSlider_GSLumBlue) / 100 $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_GSLumGreen GUICtrlSetData($iInp_GSLumGreen, StringFormat("%04.2f", GUICtrlRead($iSlider_GSLumGreen) / 100)) $GDIP__GLUM = GUICtrlRead($iSlider_GSLumGreen) / 100 $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_GSLumRed GUICtrlSetData($iInp_GSLumRed, StringFormat("%04.2f", GUICtrlRead($iSlider_GSLumRed) / 100)) $GDIP__RLUM = GUICtrlRead($iSlider_GSLumRed) / 100 $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_HSLHueLevel GUICtrlSetData($iInp_HSLHueLevel, GUICtrlRead($iSlider_HSLHueLevel)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_HSLLightnLevel GUICtrlSetData($iInp_HSLLightnLevel, GUICtrlRead($iSlider_HSLLightnLevel)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_HSLSatLevel GUICtrlSetData($iInp_HSLSatLevel, GUICtrlRead($iSlider_HSLSatLevel)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_LevelsHighlight GUICtrlSetData($iInp_LevelsHighlight, GUICtrlRead($iSlider_LevelsHighlight)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_LevelsMidtone GUICtrlSetData($iInp_LevelsMidtone, GUICtrlRead($iSlider_LevelsMidtone)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_LevelsShadow GUICtrlSetData($iInp_LevelsShadow, GUICtrlRead($iSlider_LevelsShadow)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_SharpenAmount GUICtrlSetData($iInp_SharpenAmount, GUICtrlRead($iSlider_SharpenAmount)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_SharpenRadius GUICtrlSetData($iInp_SharpenRadius, GUICtrlRead($iSlider_SharpenRadius)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_TintAmount GUICtrlSetData($iInp_TintAmount, GUICtrlRead($iSlider_TintAmount)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) Case $hSlider_TintHue GUICtrlSetData($iInp_TintHue, GUICtrlRead($iSlider_TintHue)) $bUpdatePreview = True If BitAND(GUICtrlGetState($iBtnSave), $GUI_ENABLE) = $GUI_ENABLE Then GUICtrlSetState($iBtnSave, $GUI_DISABLE) EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_HSCROLL Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $lParam Switch $wParam Case $iReset ResetSettings() Case $iClipboard Local $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp_tmp) Local $hClipboard_Bitmap = _WinAPI_CopyImage($hHBmp, 0, 0, 0, $LR_COPYDELETEORG + $LR_COPYRETURNORG) _ClipBoard_Open(HWnd($hGUI)) _ClipBoard_Empty() _ClipBoard_SetDataEx($hClipboard_Bitmap, $CF_BITMAP) If Not @error Then MsgBox(64 + 262144, "Information", "Image put to clipboard!", 10) Else MsgBox(16 + 262144, "Error", "An error has occured: " & @error, 10) EndIf _ClipBoard_Close() _WinAPI_DeleteObject($hHBmp) _WinAPI_DeleteObject($hClipboard_Bitmap) EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_COMMAND Func WM_CONTEXTMENU($hWnd, $Msg, $wParam, $lParam) #forceref $Msg, $wParam, $lParam Local $aCI = GUIGetCursorInfo(HWnd($hGUI)) If Not @error Then Switch $aCI[4] Case $iTab _GUICtrlMenu_TrackPopupMenu($hQMenu, $hWnd) Return True Case $iBtnSave _GUICtrlMenu_TrackPopupMenu($hQMenu2, $hWnd) Return True EndSwitch EndIf Return "GUI_RUNDEFMSG" EndFunc ;==>WM_CONTEXTMENU Func WM_PAINT($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg,$wParam, $lParam DllCall($hDLL_GDI32, "bool", "BitBlt", "handle", $hDC, "int", 2, "int", 2, "int", $iW_Prev - 4, "int", $iH_Prev - 4, "handle", $hDC_backbuffer, "int", 0, "int", 0, "dword", $SRCCOPY) Return "GUI_RUNDEFMSG" EndFunc ;==>WM_PAINT Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg,$wParam, $lParam DllCall($hDLL_GDI32, "bool", "BitBlt", "handle", $hDC, "int", 2, "int", 2, "int", $iW_Prev - 4, "int", $iH_Prev - 4, "handle", $hDC_backbuffer, "int", 0, "int", 0, "dword", $SRCCOPY) Return "GUI_RUNDEFMSG" EndFunc ;==>WM_NOTIFY Func WM_DROPFILES($hWnd, $Msg, $wParam, $lParam) #forceref $hWnd, $Msg, $lParam Local $aRet = DllCall("shell32.dll", "int", "DragQueryFile", "int", $wParam, "int", -1, "ptr", 0, "int", 0) If @error Then Return SetError(1, 0, 0) Local $sDroppedFile, $tBuffer = DllStructCreate("char[256]") If $aRet[0] = 1 Then DllCall("shell32.dll", "int", "DragQueryFile", "int", $wParam, "int", 0, "ptr", DllStructGetPtr($tBuffer), "int", DllStructGetSize($tBuffer)) $sDroppedFile = DllStructGetData($tBuffer, 1) If StringInStr(FileGetAttrib($sDroppedFile), "D") Then DllCall("shell32.dll", "none", "DragFinish", "int", $wParam) Return MsgBox(16 + 262144, "Error", "This is not a file ;-)", 20, $hGUI) EndIf EndIf DllCall("shell32.dll", "none", "DragFinish", "int", $wParam) $sFile = $sDroppedFile $bDnD = True GUICtrlSendMsg($iBtnLoad, $BM_CLICK, 0, 0) Return "GUI_RUNDEFMSG" EndFunc ;==>WM_DROPFILES #EndRegion Message Functions #Region needed additional functions Func _GDIPlus_SaveBitmap($sFilename, $hBmp, $iJPGQual = 90, $iTpColor = 0) Local $bError = False, $bResult, $aResult, $hBmp_BG, $hBmp1bpp, $hCtxt1bpp; $hBmp8bpp, $hCtxt8bpp Local $sSaveTypes = "|jpg|bmp|gif|png|tif|", $sSaveType = "jpg" Local $sSuffix = StringRight($sFilename, 3) If StringInStr($sSaveTypes, $sSuffix) Then $sSaveType = $sSuffix Else $sFilename &= "." & $sSaveType EndIf If FileExists($sFilename) Then Local $iChoice = MsgBox(4 + 32 + 256 + 262144, "Warning", "'" & $sFilename & "' already exists!" & @CRLF & @CRLF & "Overwrite file?", 0, $hGUI) If $iChoice = 7 Then Return 0 FileDelete($sFilename) EndIf If Not $iTabSelection Then $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", 0, "int", $GDIP_PXF01INDEXED, "ptr", 0, "int*", 0) ;create empty 32 bit bitmap $hBmp1bpp = $aResult[6] $hCtxt1bpp = _GDIPlus_ImageGetGraphicsContext($hBmp1bpp) DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hCtxt1bpp, "int", 5) _GDIPlus_GraphicsDrawImageRect($hCtxt1bpp, $hBmp, 0, 0, $iWidth, $iHeight) _GDIPlus_GraphicsDispose($hCtxt1bpp) $hBmp = $hBmp1bpp ;~ ElseIf $iTabSelection = 7 Then ;~ $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", 0, "int", $GDIP_PXF08INDEXED, "ptr", 0, "int*", 0) ;create empty 32 bit bitmap ;~ $hBmp8bpp = $aResult[6] ;~ $hCtxt8bpp = _GDIPlus_ImageGetGraphicsContext($hBmp8bpp) ;~ DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hCtxt8bpp, "int", 0) ;~ _GDIPlus_GraphicsDrawImageRect($hCtxt8bpp, $hBmp, 0, 0, $iWidth, $iHeight) ;~ _GDIPlus_GraphicsDispose($hCtxt8bpp) ;~ $hBmp = $hBmp8bpp EndIf Switch $sSaveType Case "jpg" Local $sCLSID = _GDIPlus_EncodersGetCLSID("JPG") Local $tParams = _GDIPlus_ParamInit(1) Local $tData = DllStructCreate("int Quality") DllStructSetData($tData, "Quality", $iJPGQual) Local $pData = DllStructGetPtr($tData) _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData) Local $pParams = DllStructGetPtr($tParams) If $iTpColor Then $hBmp_BG = _GDIPlus_ChangeBGColor($hBmp, 0xFF000000 + $iTpColor) $bResult = _GDIPlus_ImageSaveToFileEx($hBmp_BG, $sFilename, $sCLSID, $pParams) _GDIPlus_BitmapDispose($hBmp_BG) Else $bResult = _GDIPlus_ImageSaveToFileEx($hBmp, $sFilename, $sCLSID, $pParams) EndIf If Not $bResult Then $bError = True Else $bError = False EndIf $tData = "" $tParams = "" Case Else If $iTpColor And $sSuffix <> "png" Then $hBmp_BG = _GDIPlus_ChangeBGColor($hBmp, 0xFF000000 + $iTpColor) $bResult = _GDIPlus_ImageSaveToFile($hBmp_BG, $sFilename) _GDIPlus_BitmapDispose($hBmp_BG) Else $bResult = _GDIPlus_ImageSaveToFile($hBmp, $sFilename) EndIf If Not $bResult Then $bError = True Else $bError = False EndIf EndSwitch If Not $iTabSelection Then _GDIPlus_BitmapDispose($hBmp) If $bError Then MsgBox(16 + 262144, "ERROR", "An error has occured - the image couldn't saved!", 30, $hGUI) Return 0 EndIf MsgBox(64 + 262144, "Information", "Image successfully saved to '" & $sFilename & "'", 10, $hGUI) Return 1 EndFunc ;==>_GDIPlus_SaveBitmap Func _GDIPlus_ChangeBGColor($hBitmap, $iBGColor) Local $iW_TP = _GDIPlus_ImageGetWidth($hBitmap), $iH_TP = _GDIPlus_ImageGetHeight($hBitmap) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iW_TP, "int", $iH_TP, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) ;create empty 32 bit bitmap Local $hBmp_TP = $aResult[6] Local $hCtxt_TP = _GDIPlus_ImageGetGraphicsContext($hBmp_TP) _GDIPlus_GraphicsClear($hCtxt_TP, $iBGColor) _GDIPlus_GraphicsDrawImageRect($hCtxt_TP, $hBitmap, 0, 0, $iW_TP, $iH_TP) _GDIPlus_GraphicsDispose($hCtxt_TP) Return $hBmp_TP EndFunc ;==>_GDIPlus_ChangeBGColor Func CopyImage2Gfx($hBmp, $hGraphic, $hDC, $hDC_backbuffer, $bW, $bH, $hIA = 0) Local $f, $iXPos, $iYPos, $iImgW, $iImgH _GDIPlus_GraphicsClear($hGraphic, 0xFF000000 + $iBGColor) If $bW < $iW_Prev And $bH < $iH_Prev Then $iXPos = ($iW_Prev - $bW) / 2 $iYPos = ($iH_Prev - $bH) / 2 $iImgW = $bW $iImgH = $bH Else If $bW > $bH Then $f = $bW / $iW_Prev If ($bH / $f) > $iH_Prev Then $f = $bH / $iH_Prev Else $f = $bH / $iH_Prev EndIf $iImgW = Int($bW / $f) $iImgH = Int($bH / $f) $iXPos = ($iW_Prev - $iImgW) / 2 - 2 $iYPos = ($iH_Prev - $iImgH) / 2 - 2 EndIf If $hIA Then _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hBmp, 0, 0, $bW, $bH, $iXPos, $iYPos, $iImgW, $iImgH, $hIA) Else _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBmp, $iXPos, $iYPos, $iImgW, $iImgH) EndIf DllCall($hDLL_GDI32, "bool", "BitBlt", "handle", $hDC, "int", 2, "int", 2, "int", $iW_Prev - 4, "int", $iH_Prev - 4, "handle", $hDC_backbuffer, "int", 0, "int", 0, "dword", $SRCCOPY) EndFunc ;==>CopyImage2Gfx Func _GDIPlus_Convert2HBitmap($hBitmap, $iColor); removes alpha backround using system color and converts to gdi bitmap Local $iBGColor = _WinAPI_GetSysColor($iColor) $iBGColor = 0x10000 * BitAND($iBGColor, 0xFF) + BitAND($iBGColor, 0x00FF00) + BitShift($iBGColor, 16) Local $iWidth = _GDIPlus_ImageGetWidth($hBitmap), $iHeight = _GDIPlus_ImageGetHeight($hBitmap) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) Local $hBitmap_New = $aResult[6] Local $hCtx_new = _GDIPlus_ImageGetGraphicsContext($hBitmap_New) Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $iBGColor) _GDIPlus_GraphicsFillRect($hCtx_new, 0, 0, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawImageRect($hCtx_new, $hBitmap, 0, 0, $iWidth, $iHeight) Local $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_New) _GDIPlus_BrushDispose($hBrush) _GDIPlus_BitmapDispose($hBitmap_New) _GDIPlus_GraphicsDispose($hCtx_new) Return $hHBitmap EndFunc ;==>_GDIPlus_Convert2HBitmap ;Code below was generated by: 'File to Base64 String' Code Generator v1.12 Build 2013-05-17 Func Reset_Icon() Local $Reset_Icon $Reset_Icon &= "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACC0lEQVR42mNkIAKwxjMJM/9i8vjx9M86hkMM35HlGAlpZslmcFMxllssrMcidq7/Ydr3pX9nE2dANIOImD7HXCltAT9hUX4GEUkhhps7vj+/kHpBCq8B7BHMvPwezFUCnHylopI8zOxM7AyszGwMAvwCDPwK3Axz9Hf6/rv9fwtOA5itGIPlUvjXiMryMPDy8jFwMHMwcLJzMgjw8jNoK6gwrF9y/vGh2MNy+L3AwcDGYMRgoJMivdLQWUOBm4WbgYebh4HxNyPDP5FvDPNd92S92/N5OsFAtFqj8cDCVVeenY2D4fyxa3c4jkvclnDm9fzw4BvDishNjAQNCDhu/VbfREPo28/vDA8OvPq42mePQGRKLPfyOYu/EhWNQUdt3uiaawh//PKR4cdhln8zfJczo6vBa4DHJtPHZj66Mm/fvWf4tov5//yoNUwwuf///7MwMjL+wWuAzUyd97ZpJgJvnr5h2H/i9Ls7IS+FQeJrVq1nDAkL/E/QBYELvK+yeX3UYv/Ew7Dn7u4HDGdzjJ9VTXxHtBeCZwR1vOO9H8tjwyL15fC3R5/OftQ62//kK9EGgIDaZMmez4ovikV5JRmYtvBmXui+OQMkPmPxSsaM2PD/BA0AgfA6t9gzpqcX/WT6yiC6V0n3fN+NK/uOXmZ0stYlzgAQiOwOdb/14+yEs5z3/jOUMGjBxAESN7ER3OAlewAAAABJRU5ErkJggg==" Return Binary(_Base64Decode($Reset_Icon)) EndFunc ;==>Reset_Icon Func _Clipboard($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Clipboard $Clipboard &= 'iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQCAMAAAAVv241AAABBVBMVEX8/f/s7vD49vj5+vv4+fuQSBTh4eH4+vvk5ujt7u/t7vDj5efAwMDy8vP09fbS0tLc2tr49/j9/v/59/jw8PD7/f/Tizba2trDkFbQgSTg29OtfUTq2MDk5OTj4+Pk4uHPfyLk4+LdkTLSiTbSgiPLeyLj4+Tn5+e2il62mn/m5ube1cvs7u+zgU+5cCnk5ebWlEOufEHNzc3Fdyazbi7Ozs7MzMytcDiyczq2k2+vd0fj5OaxbzauflatajSvh2bk5eenZjKyknahYTGleVbv7Ozz8vPHxcOudkHz9PXw8fLl5uedXS6ZURuxcDaQRxSMRhSJRhaMTiOTXDSYaEWUXjeYTxv6l0DeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAlElEQVR4Xj2M1a6EUAADe3CHdXd3d3eXq///KbtLgHlpJm0K7xtOUQKfhL/ZOrR1vdePpDPIho1CjOPi5Uo0iFCCgglPSkimXJZII+TyltBSER3BmjHVGuoNj9uEFo/oypTPhCEDDAVH7hhPnNkUM7vhyRyLpX0trrCW7WuywdbY7VVV007nyxU3ln2wz6/vn9+//xdk9BJOUsHn+gAAAABJRU5ErkJggg==' Local $bString = Binary(_Base64Decode($Clipboard)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\clipboard_paper_16x16.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Clipboard Func _Logo($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Logo $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= 'FZNpM7PNkI2yS4GHJe7s3u+n+l7q07z4flSRGP5Jsb39UXRpJBYche6P3EIgtNio6S4u82T4IWNJN+e5MY6Q2aE8SWIj7B4BY56dtnbDft0Moz/UNuzejSR8SFJG6J2Eo00oF7JtIL2e7nn5oRdI49EpIDGB2owStFy0prHPNmi6dFIwXc22htO4i5yRpnW1TdMY55s1e6yYrJ0ETGFznfBQxh8W3fz6quGF4bwGiOOJ7dufgn04a0ngqVjnMdbs9VUi0p53aI74xZS9R/O8aDqQW5z/ANJkTngkKnBDWtdx+ybA3FilPhpYbNFtw/PwQMD5LHYi79xXvkd9h57PypdZrm96pBd5unOL3FxUQ6OMDjtUk7YsjmUJhI3E3ctlUO231XShrBjKlkikjsDmPgg/ig8FP1u4eWmN5wh17ZZ+NvshNDfafD8phayUHcCsUm7U8+fBYWk3Lifp91OcUZPaPIqnddhad3P2TnhrdY2CbKyTqlS2fIwlY8yXKSojeCLKB+C/E5fVPkYz9u8qZ7XABqpG2u9OkbGMTkypbKcOxVGswHgmvNsV7ZC/khNCciT4flQOwyjhsTCQLBBjgcgsBbqtbYLoXjdkqeAl532y707pS7Ub3nf45LA5zb5YuzmyLg2queOfqnPaxoD3KaSKSOwOY+D2c/VLFXx2fjGw6I6Z8rcTPspm9FAGk55ev4VDqxF1t6rWl1pd2zRSU7g4SOVbLq9GoIjM+yrMmgcfRRzRtjDSFGGuixFu4nwCdURuaRh26aWJsrGuU8JgeWnTRtDpcKqqR3Q6qtdSt6KPP5fdQHJw52HRHBjYCDuHkqmN0cpxKnjc4E8ck3XqRbmynBDgDw+Gmbif3FVLCx+fAaXtLYB8vUnRSR47uG0KZ5hdhtmmPqJTZiqm4WDt9APuqUXx/L1CqSekLeGSphd/cVU6r8PBQET/AD39qqKXAMbNipxeZqqLDCBw9dHs5jZAbr2lAWWcBkoWF8gCqiMm96nuIQ23D10QjFI0Diquodhs3eqKaTA7nip6l8ryb5KCZzoQXdv0VFZ0Xbfn1UsNS5x6Not3eqNNUP8A4jlAB07bZi6qCS4X4fDFI6J2JqgmjmFh4KSihdsFlTUwgJzXtEizQFDQwz5huSPshodfcvdIYTqhT1gbkzMom+ZVPNDTttfn8KsmExBBQzKM8QBDXDYePD4KKp6F2F2wp0MdQ3WUnsh/9MpnsotF5M1UN92nszs8lHXseM8lLPEwk38FLKZTdQSCJtyd6la1rtU5Kkq+iGB+xPmieNosp6rEMLFSlrcTiVVFjiCw3y+H2a3E9y9oUzuuN2hgDnAFTSROY4YvPnZopKgQON9hTqqEjNyNRDGOsqp0cjQ4HNU7o2g4ipDieSFSnrDs9QVJGZZ34BvUPs+W9ybKrIbG66pWbX8FVOvJ3DRTzmB+IJtZFKNvin1EcYsM/JM/5JRjKnkjfG7Wz7/9aKbCJLuNlUuDsNjsHqVTvjbFYutnzu0RuvTOHD7j7qCd0DrhMr4LXJVRPFI02cNipcLcTiVVFjiMJvlzt+Mucdp0MGNwbdR1sdK3CD4Z/hS+15HdUKSeSTIn9OCrkgyGxQ+0ojtyUlZEWbR4qpcHzOI/Xo3iONxJU1c52UeX6bJHRm7VTPvPjeU6viYMs1LM6Z13Jr3MN2qWTpXYrfqCRwbh3f2Fjg3cjx023qSQOFh/4fpSG4Vg1SdAkLW2/wAi/wD/xAAuEQACAgAFAwQABAcAAAAAAAABAgARAxASITEgQVETIjAyBFBhcBRAQlJgcfH/2gAIAQIBAT8B/bq6/KWeoWbuZqmo95uE3lMf+yysD/3ZsNz1l7mn9IP0iFjz0Fqikkm/hf3GcTUfM90VAx3+Yse01Hm4LI3/AJRzQgF7CBQvE5np+I/aJxky6dxENGsm+2R3O8T65ue0Va3OTLcAoVGep6hitqjjiJxCQOZ6hgxPMJqaxNRJz0iEAbxFmlfEAA4m' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= 'U4hxR4WQIJ2nShwQ4oBtKoxSUSpQgv284Cw4D2MR5QfPapd42PWDoyfHpNWzrC1Rpm1wGWVAsy2dn9jQlQxLY4qdhPs5WGB7H23V4CzRtXaUoeCQ2BsjwQjaH4JRTiFAV4WQWAQi2UlMvJbtmA4Zq8aiGv3QWWrQOUoILA2TgQ4IOyViOIZK/wDEwliZTiU4lOINStiZ1p1nGFx4w+SQeRBq878Gz1uEODSJskLZCIVleNSkqV41K/wWwNkPZHgfIPuPOaZjnP7txiuWZzr5Ggc8zR18fbinkZjdOpfS68pWleIWOTDZaGd/GpUrxqC0eAyUH2fBXjUr/CLIlwdLtsUBMWRZUhWDQevZKkCtpleUyveBXEp8alSv4V4KfwFeFeLaWy0lrEnVEJcDYWs7zB2epPmPSo7t68e9WWDtlCMiwRlH8a8SvCpUr+FSvCpXgkYICvCpSU8FSpX+il+AQ7QDaAQBCK/1UgsJ2jto8UM2gTR4hmruxsbL6Rpv2Chqhh55YmqLlYQNgciXjW/5nooWwbSPX4oO0OGM1Atg3xhAac58x/mS/AV4hG0p/wBapbCivEI2lMrwqV/6leCv9uvBWVlfxsCLRt6KUNmsf9YAsCVXKoGgBzFyx7yFjTqtnf8Ai820Ba8DdlElwFdi6xiVSNJIX1w107wCEAoDb/PXgr/ZqVK//QYcT+Y7RYiwOF1epiUmzFjGu2zdVTeA6xAINgB3cF4jSDYnjEyaPp45pHIDLDtkJVsOKHSiugOlwKK//hxlA2tBWXWLwBXsQA5Lsc8Zx7gYD81Hl44n+2S7kAACg0P/AIN//9oADAMBAAIAAwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQgAAAAAAAAAAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABggRwyQigAwlAAAAADyiTAgAATAAAAAAABR3RgRt0AAAAAAAAAAABACgAAAAAAAAAAAAAAAAAACBtR8Fari/ih0gC8gBFdtrTDTRU2ByQgggizSFSDM0whSQAgAgRzCxHHPzgAAwAAwwwQgAwgggBS7JxMMoX0btgoi6gRTKIQIqUknlfq2+zrDgBJ+KMIhoQ91hZJmtxvnzxwsGMd8NBxk/DerjLjgCgQMzGv6vC5fyhSIUExgCABL2J1pl1I/bJlwDQZtDA29RK3wJZkVXv0JpACgH4+yUXOkr/2Am3wDh7tBK6HCQmsNGoSCCyT/CANT2rVCIvqOWyAAC5oAjKBB3R0qnt9XLfVDsCXP1iuaokSc5u5IyABRI9zY/8AWUNmexLPwgwZUv2JN8UuJuGZf2AAAA0kIxtMmKeepmioLHd5gxgkmxsBo3dWBeZP+AAAA0keU59Hu8k0UUo4AQIi0RBIYYAsoUEcUgAAsG3MQoQQw44o8qSWxAUIk80IowIUw8bEM4kUgAAAAAww40IQAAAAAAAAAAwQwMAXBAAGTAAAAAAAAggAAAAAAAAAAYcAgwAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARKAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8QALBEBAAEDAwMEAgICAwEAAAAAAREAITFBUWFxgaEQkbHB0fAg4TDxQFBwYP/aAAgBAwEBPxD/AMiRQE/8idWY2J/gigJaRUOf+kBl5XXgNXwapRCbbX8BB3nrR10cJHtNQYyf0xSUKIpayrDGIUmOYqRJ7PE7z4rw5PAS7yKEVV3fBLew' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= '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' $Logo &= 'oZzSc0k9XCs5DdLT8ekAkVPgMRpRFvhBTldfbGbMwQAHUomqGCGhTTbvheC8X1iBfEaRAQl5Y+1Q+I22oUo65m3uWgW8+DhrL5YBsBwL9y1Qd/fwRInCylNRpWjTPWX8l48I+gmZMlAVFjT/AGll3VbTynAdRhWt4NrhP2wqNUDVd15WAuDSJ4qMnpnSWGU6Ma/ZucpDLqqXrRAstV+pbS75a8Qai5N6rrE0lMC6B+t457q6C2oYKV1xHhEzqlYgKAhW3djzA/KPamkF2mKlUyqEv40Y8nmW/U5FgpOii3pqSsSv0QLFOQvXVrbEIZTGoAqggqMYqgO7AU49t73KAAwaPklxKZA1Wj1Z8QxnaIxmetn5Q+ZV06QEKoqjLFNv3TCntwyBOyg1zU8bjfbStlM3b8mPyqzXGGL81M8rXcDoOL3uYEaBlRsIOh9nh3IqAliupXs5jgFWQvktZfMo7xB9BpUpLlHI3fFy4XsibMV7N3qWgTgHYimWtX340xVGES/9of0m7j9R60qPbEFN5YByvGE+kiv827Wr2hk0sl2P0HxBDFRrDIej7mLOxwHARp9LdaZo9S2IRVj/AOdpUYfJ+qHgYeVH04kaLp2lxYOoBUuAO3BhBhgvmcOg6gNgMJ6gJfNLHS1HesA+5ihqzJcUl1dWS3sZuYFKKVB7RNTaVWVnV2xfddw3Qo5gVubfIS3tRYRYgljLCBnF4ICwVfN6EjVg1t6gn4zXuIOZF11A3ZpCcgXmAoys83R9BCSvKNAGrMGVbhuBLqlPCO0oA6cqP6hjgotbF/VxbT65Efj8oh7F9XFMtFpwYj2vkqo3BqJ5T9EXApm3Z/FwGLEQ+VQzV+0CtIga/wDSr4l51Y7x84YOrgHYrWZwydV1e7De1QTzGRV9wBpeUqrmgpQHbD8otO0BI14KQv2B4lAniUXDTuOSp4B5+BXbTAIYVeOkDgF5wRxde0UJpmC0LmGrGSnUfzADpXPB+Alr6Dxn9RzVxYFdHOQL5g1T3H9CE1LnZUigLxd6Cgy7u+LlQh/DSyqGZNwdPzwRZHf4Y0PjUl0OqfSV/UVRVhlWB2ArTmWjzVYAITVYOFETxDGzTADYsDBt0gJWhA1dI/kiFZmTQ66D/wAQkQXrS/t0JXFhlFv2J0O6h9Q5la1t1n/lRA/cZ7EvZb7oCfksvXQY9X0EXXRZdPAZdt5eIOS3LvrFMWG2wtTuUMwkyUSGRSQG+IjwS1cIRzLBFJVA7YYcEF60awXAsAUvrrCHjaAkreV2s+sB4gMGoHW1/DAQKOoms5OitIWaIKqqbVUJUil2JRAtCKvP+KPEuNUOXwHuWVHV0+BLKw2cRGTWH0a1oJrcwcoDynmNAtUvOItxiq+P+kbDrJT6nVV2Y4iAqd5Bvq6DdaaXLooNm6N13Yp1jiTW1T7Ix+g3yXMIvUo9sStqjgvVEx4UXQ/GEqasFUUA25JfGnF3eKdUfugYdLiDEjiGrV1jDjG25FYbA00VxXOAHB0tl4yWSp1crb0hVELq46noVH2LzScGgPXJD6HFvVUb5loEhgwrJqEtlil01WIxcN9RB9iCtZWDbIVSiDfaOEpq6+AjsAS5kt2y/CPZjQLDAa0k5HcvKW5zKhD5WQrdqxai1HZQUMMByI5EhPwcnv8A0rqRWfaEjMOm5aXOMgwQrrWyh7j3CX0igpzGbc7R7wf1HdawNaXL1u4lUpYNaP0fl8MW6KszGyLmKdaQtxicy+GY2lYwF0ddg3am6PTTCeBqYHxxRDCUGtXsEE8PYKqgmtpvabR2iMFIGz3bji0AWLF7UJbiw3qUTiL0mgdI4ia27LQmiWNLdIOkU0raqKqdm5R4Zg7OSi/Eh1GduNhLjm3Ea1BUZxfOjGDWi3kH2TMfslQMYmxZehCHsWsQsRgHmCkuX8w0C/IwHQ1rSjnoywFwrDWubiNM/U0IaTEAhEWFbbJr8QQiy96qh9kRhdevc1Vz2IMZY7UDIvoKYgbQ' $Logo &= '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' $Logo &= '1S/kbFQkUrZEUQO8Huoa97kJpuWbw82qSwwiO0ystrd7y59si0wkICHi2gbBTpExSOnziitqoErVR5eB6ZK21TW4cllBjaJQIEPP0pzrAq3SHzBHw7PCNibIkvMbQbVAGzXLQhw3qE9UMUd5NRwM8hUN10FEA6gSxKR0iMZvwaDgSgULB3aidMS1ULY2YALc2l0pDv4GCO2NpX4XTksR1HxETAHrF6wfeIf4CVL4i2ERu+7bAvPNyi/eBBWUtZQdabwM+UUvEVKM1EpQDKrA8ES9qHZYTlx9PCOBXsjzAkLHHok6KCm2cjPBonklm1DQ5QoV21dTFXFYJ5U+WBSrBoaAaLDCo7zBXUGzlqHZSUF0K3gFjHair2gO4XMVTveIx7V41Rl8qvmVPaCA3cWNctdrHwwZC0DfK3ZR4hW00icxNed9quZDqRqCkhb6WzNL2B0r3mIUZ3ZJ64DsxZk7SojQ8wE5cgjrdoDxAgH8Pf4yuBqLyaIhhvPVtIWlQDSjLMFmwuJGETCVLD0anyDHSIOJiCyu4DBTIAxTxfNG7iurWov6LOIvXFFX9THcdbojR1ao6sbwE1bbRvZR0E2kRcAHg/iH0Rhsku9ita7PTyxN4lPaGAcmT0/crMbQAVVdSoTuh5gqhUOlCPxEwNXjwdpZxlHqfZlIckNlwOtnsJ41E6wCS24yu2rWXRarBxgOmETFaxAdTXpH4FjrrFDccpv1yHlAPCNAF24tgDkfEQAbABt3hsfeIfzJIbYmsiGwGOr0shwONhIBwqcoNjl4IL1QZDYpseEGx6MQKsdyAbCaWrWTaef7teDTdEskYhWkjOaQ9B7QelWIyoaIAgLtgdcDULdzN4LGRM1k7iq4/v8A7vmrYXsbr6lyVLJY2/NI7wfyXC5kVs+F03QbAAAKAhKiXICGI4gCsaRnYOA0JnhMlO+idDgKpixmVKo6MsgTk1sIsWC6zV0t6QLNWaXIsbqqq5Yc22GpoVwZbK7SqVUoD+FaBhQ932xfkZsDqNDJk3W5n4gm3mpxM2VGzfoyslWts/8AhWoRsEdgqR7Lp6BBLdkuv+R0RFch0DQ/vcfhddcGtrVqvUA7LslkRnu5gdTR3GLC0KVPhwj5NWMpU5JbglrqO02ZlsqvI+qAiQFNTTYKUu9001dNNNNNVAYEczCjZRU7qsy2DLRMBptARolZuyiRUQwn1G/JpOk9CCVolBVGbBnYMdGs7hQBXiw5IpVIMJalDpCdVhjDJE0xelxEKEEjsJdAvQM1cG64d12Jalqc0i2poyoKD+TpHTlPbmeKSEyh2oV/bBNWEhEdmAR2QjieIN0Dsbu8GjWI7i4hte0dAIwlI00owtAuMig1VFGnSGNY8EdrRZtCs9ma+WwC4hgEqXck9ndWtxgfeWVXVHW4RIyN/wB8/mJXFIs2RpV9eSD9iH9kIUANngdEpwpQVocrVxnJpLb71g0ttVmVegGWMKxYOasuW3IFdOVE2BNlVJilXFDsI4Nrq6+N09NqSReFLfonqESpBvpjxinskfwTEkLWqgQzhYWRRe7uhdit6TA9AxHTH5ZLS0lIFtNgNv6XkI5ALWJ4OTc3EWkGWYpZgtotwXM0e37sE84QrRbdrHG8PUz37PgAwgsgIJA0QlImsMqLbvytkUuvgMHCv2sN4GbviEguqIR3uudKtVsRVeV2U3SrA0oBVW9jMojYMWBZcWtXZY8k7qO0H4FSts10pVutnqxTETEuoGHI7EDwANgNA3XdiGxBBBVsboqComtRRSQxspKUKXMEK42KH2109oQxRm3ovNLYuZZW0UFEGvbTyKeYIawXw/8ANhiJtA0ApEu4JlQ0s2t0Uur5MEBvOfKiXEcbWZWrqwtK4AAhMWN0osaUpMJpi+YiFQjR2EugXoGauCJNO67UtSlOaRbU0ZUFB/NLgFxC2En9YuZW1E+UY4ULlXL8C1/Mu6zbVHoBJRA2izGAFOlbqsaMKPiI57LGIgGXQfVf' $Logo &= 'TBe3QLqE/ZO+JMvytHBQbaB4gRzaDyFarq5h0CCiBCAGXllxW1Y9gQAUStVB1kQuEcEAwP4JcMuPiRbLYvixk6mjuM2Got7zVOmb+yFkaUNdkdTlYJxwZXToIP8AtbvUn9dHeK3msXdW/ELu1srqfjn4l1xtBMkRcPUI3T1KrCCcERUG9kU3A7JSQRpLa4c0+otolFBjBCGkUthHSAYH8n4CHdop2CIxB3RLU6MlbPFUoc5d2hxe/FKvywxL2o5R70NEoQ7WRRjTCAJUEy4si+iNmn1DbfUJs9RsgDpBTSZtIWgjjLzE1U89WrBOrc2je417azKqi9uAlmFSWl6hxyrkO0DsIVVzmWidTfemGtdDdI2QhQQ5AwGob6jkKYKFS9kjU4K9H5AX3mFyLZ7lqWzbS1FNJiGg+LDMNbJZXCnT6jeiGYJWqqbZMkaYStKlbSO6RDSAGkPWQuuoRwTAVGTxYSoUobtomNGXLP4hbAwnlHoVWFQ3JLKFbfUM6fUpqExVUYwjpAMD/AkB1JtEVtHjTppTshMCVCEBhRNBhCpS3qUi5ujWQMWP6uWxW8sdpzsgUJrZjoEqMfUpsJpJCgp8JEup8ATaEVEleIU2lfySEdICxfzsMaEd0EdLHSIUiYBTwIvKI89Zn0dgvRbvAMsNhvuGP7UXamq2SjDQYY2Stga0iOJXiCeKOsoVFp0NWVKjaVgTQlSo2g29gNvE6ZcV3jtK8QJtKiSvEK7Sv5ukuIsTJHCQZVaAN2Hu1hT24UGr2HM9Kkd9uOqSwWAnSBKjFeIU2lfFRtEcfEGU4lOIRXwqVCgdkFMQbb32VNNQQUyniqbOWfji/wA6Xafk1DW77qgxBBRDTSOaQQ0fGPmol2leIA2hSVG0rxCK+Kj0TDaVGOyVLNYS6QR0hxUS7RkSAbTsleIV2lf46lSpUqVoNrI1n6Tak2qbZANof6ioLrNgl3hL3H1GOn1GzGUlEoQ+EogVqBsBFtVgjUVS4K8QlCWUAsWMLlm1bwIhkFNPb+dzl2otoL0miJDmlACSw6kIpU4HWtZoZWWW4qDT/NUgWsijfw8O2BX+pUYIS8shfo9TZ0E6QpKjbaV4gf69Sv8AaSNtSU4geJUr/YqNoh2+QCaED+AcP0lYlk0hEhdX1BA9cRhsgwUcGLsuqGseUwQIjgdbD+FRpbVWrVzQL0BWgUA9GKiIJTYvZTrMzIs0CCTNDejNJbZzRDUA0A2P8yRtqSnEKSv9dI32leIRX/19Qk6F9L1AyrhWIo0GTCyQCNOBEtEPwVc5SZixS3LYXTTFUEeKJIghpVqlp+QY4rTK75yWNapxG0xkqVMk2ujTZmlEFQKtbf8A8HaPNCFiqjdVXlWO7hTIDcitK4LaWLC5wZYBNug9wvwVf6UW7pMJYQygqAoDj/8Ag3//2Q==' Local $bString = Binary(_Base64Decode($Logo)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\GDI+ Color Transformer 07.2.2.1.jpg", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Logo Func _Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_Base64Decode Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize) $tOutput = DllStructCreate("byte[" & $iBufferSize & "]") If @error Then Return SetError(1, 0, 0) Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0) If @error Then Return SetError(2, 0, 0) If $aRet[0] Then Return SetError(3, $aRet[0], 0) Return $aRet[6] EndFunc ;==>_WinAPI_LZNTDecompress #EndRegion needed additional functions Requirements: Vista or higher operating system! Souce Code is made for AutoIt version 3.3.8.1 only!
       
       
      Please report any bug if found (I'm sure you will  )
       
      Download: GDI+ Color Transformer v0.9.7 build 2016-04-23.7z  (previous downloads: 347)
       
      Br,
      UEZ
    • By lIlIIlIllIIIIlI
      $input = $CmdLine[1] $bytes = 1000000 ; 1000000 for 1 MB, 1000 for 1 KB $size = FileGetSize($input) $file = fileopen($input, 16) $max = ceiling($size / $bytes) for $i = 1 to $max $data = fileread($file, $bytes) $output = $input & '_' & $i & 'of' & $max filewrite($output, $data) next ^file split
      file path for a 20MB "video.mp4" is input, it will be output as "video.mp4_1of20", "video.mp4_2of20", etc. change $bytes to affect the split files size, this example made them 1MB (10^6 bytes)
       
      $input = $CmdLine[1] $name = stringtrimright($input, 1 + stringlen($input) - stringinstr($input, '_', 0, -1)) $split = stringsplit($input, 'of', 3) $max = $split[ubound($split) - 1] for $i = 1 to $max $in = $name & '_' & $i & 'of' & $max $file = fileopen($in, 16) $data = fileread($file) fileclose($file) filedelete($in) filewrite($name, $data) next ^ file join
      file path for any of the "video.mp4_Xof20" segments is input. the "video.mp4_Xof20" segments are read and written to "video.mp4" and then deleted, leaving the newly joined "video.mp4" in the end
       
      i made this today because i had a big file that i couldn't really open. i split it into 1000 chunks to make processing and stuff easier. i've also used it to split files to just under 25MB segments so i can attach and mail big files over gmail which is silly but it worked
    • By Gowrisankar
      Dear members of the forum,
      I'm working on a project in which I have to use Image recognition technique. 
      Due to client restrictions, I couldn't use AutoIt for this project. 
      Is there a way to use this DLL "ImageSearchDLL.dll" (which is used to do image recognition steps in AutoIt) in VB.Net to achieve the same result? 
      I have used this DLL few years before and got good results. If there is a latest version of this DLL and if you can share it, that will be helpful too.
      Any guidance is deeply appreciated.
×
×
  • Create New...