Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 06/17/2013 in all areas

  1. Maybe you can both learn something? #include <Array.au3> #include <Inet.au3> Local $sKeyword = 'AutoIt' Local $sSource = _INetGetSource('http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&output=rss&q=' & $sKeyword) Local $aSRE = StringRegExp($sSource, '(?:;url\=([^<]*?)<\/link>)', 3) ; Should be 3 not 5! _ArrayDisplay($aSRE)
    2 points
  2. Mp3SearchEngine v2.0.0.6 May be some of you know Songr . This script do the same job, it can find more mp3 files but is not as fast as Songr. Sites used are music search engine Websites designed for LEGAL entertainment purposes only. Thanks to Brett Francis, Prog@ndy and Eukalyptus for >Bass Udf, trancex for >WinHttp Udf and the AutoIt Community for his help. Changes of v1.0.8.5 Three websites replaced cause they are dead or use now js. All search engines updated ( not without difficulties for audiodump) I use RAGrid.dll for the first listview (more fast and stable, but with some inconvenients to manage the no-edit of cells) Input queries are saved ( the twenty latest) I use now an mp3 pre-Load management before playing and a double progressbar for visualize pre-load and play, where you can click for directly go play in the loaded part. Most includes needed are embedded and all external files are embedded in script with >BinaryToAu3Kompressor . Multi downloads available with embedded downloader.exe Changes of v1.0.8.8 Search on audiodump and myfreemp3 fixed. New buttons. Added Gui Menu. Titles are no more editable. New "About" with >TaskDialog (Thanks Prog@andy) Query button permit now to check / uncheck all checkboxes And some few fixes and cleaning. Really more stable now. Changes of v1.0.9.2 Dilandau is replaced by mp3chief and mp3ili by mp3clan Search on mp3juices, baseofmp3 and soundcloud fixed. Soso now provide m4a (aac) instead of mp3 ( m4a can be played by MSE) Added possibility to encode automaticaly to mp3, aac or ogg ( at the end of download) using bassenc.dll and command line tools : lame, faac and oggenc. Changes of v1.0.9.3 mp3skull fixed mp3chief fixed myfreemp3 fixed mp3clan changed to tusmp3 mp3juices changed to emp3world baseofmp3 changed to imp3 and some minor improvements. Version 2.0.0.6 Most previous websites used are dead or have changed the way to get links, so instead of try to repair the previous version, i have created a complete new version. The main tendency is the simplification : Only one website : audiodump (Up to 500 results by request) Script use now the little pearl created by Ward : curl.au3 It permit to create tasks (get source and get multi mp3) in asynchronous mode. So now, no need to use several executables and no more gui who do not respond in case of connection problems. Script use Bass.dll X86 loaded in memory for play songs. Result is light and fast, but don't abuse of audiodump servers who are not beasts of race. Warning : For avoid errors with curl.au3, you'll need to comment the line 63 : ;~ #Include <BinaryCall.au3> @AutoItX64 not supported and only tested on Win7X64 and Win8.1X64. As your browser, use Ctrl+w for remove the current Tab.(if there is no search or download running from it) And also Ctrl+q for set/remove Gridlines. Events are displayed to the bottom of the Gui. Version 2.0.1.1 Added a Paste Button. Querry list is now correctly saved. Querry Combo is now sorted in alphabetical order After a 'No match', the next search will use the previous empty listview. Bug when removing tabs is corrected. Added string correction for the request that, in the previous version, was not always able to return a correct result. A big thanks to Ward for his great UDF, and Nina my favorite tester, (who between us is also my third daughter), for his precious advices . previous downloads : 1703 As there is no more script downloads count, source and executable are available in the downloads section Enjoy ! July 2017 Project Discontinued due to website changes
    1 point
  3. Hi, From the helpfile : And it's the same for all dir macros. $keyword = GUICtrlRead($Input1) DirCreate(@ScriptDir & "\" & $keyword)Br, FireFox.
    1 point
  4. _InputMask Version 1.0.0.5 uploaded with better input control. See Post 1 for download
    1 point
  5. Just use GUICtrlSetColor() to set the font color. Only using background color is a problem. #Region _GuiCtrlSetFont.au3 ;Copyrights to funkey !! #include <WinAPI.au3> OnAutoItExitRegister("_FontCleanUp") Global $ahFontEx[1] = [0] Func _GuiCtrlSetFont($controlID, $size, $weight = 400, $attribute = 0, $rotation = 0, $fontname= "", $quality = 2) Local $fdwItalic = BitAND($attribute, 1) Local $fdwUnderline = BitAND($attribute, 2) Local $fdwStrikeOut = BitAND($attribute, 4) ReDim $ahFontEx[UBound($ahFontEx) + 1] $ahFontEx[0] += 1 $ahFontEx[$ahFontEx[0]] = _WinAPI_CreateFont($size, 0, $rotation * 10, $rotation, $weight, _ $fdwItalic, $fdwUnderline, $fdwStrikeOut, -1, 0, 0, $quality, 0, $fontname) GUICtrlSendMsg($controlID, 48, $ahFontEx[$ahFontEx[0]], 1) EndFunc Func _FontCleanUp() For $i = 1 To $ahFontEx[0] _WinAPI_DeleteObject($ahFontEx[$i]) Next EndFunc #EndRegion Global $hGui1 = GuiCreate("_GuiCtrlSetFont example", 300, 340, 100, 100, -1, 0); For $i = 0 To 350 Step 30 GUICtrlCreateLabel("This is rotating", 50, 0, 300, 220, 0x201) GUICtrlSetColor(-1, Random(0, 0xffffff, 1)) _GuiCtrlSetFont(-1, 15, 1000, 1, $i) GUICtrlSetBkColor(-1, -2) Next GUICtrlCreateLabel("This is a vertical label", 10, 30,200, 200, 0x001) GUICtrlSetColor(-1, Random(0, 0xffffff, 1)) _GuiCtrlSetFont(-1, 15, 400, 1, -90) GUICtrlSetBkColor(-1, -2) GUICtrlCreateLabel("This too!!", 130, 50, 200, 200, 0x202) GUICtrlSetColor(-1, Random(0, 0xffffff, 1)) _GuiCtrlSetFont(-1, 15, 400, 1, 90) GUICtrlSetBkColor(-1, -2) GuiCtrlCreateButton("This is a cool button text", 10, 220, 275, 60, 0x0800); _GuiCtrlSetFont(-1, 20, 1000, 1, 8) GuiCtrlCreateCombo("Hello", 10, 290, 275, 80, 0x3, -1); GUICtrlSetColor(-1, Random(0, 0xffffff, 1)) _GuiCtrlSetFont(-1, 15, 1000, 1, -3) GUICtrlSetData(-1, "Item2|Item3") GuiSetState(@SW_SHOW, $hGui1); Do Until GUIGetMsg() = -3
    1 point
  6. seeker... I removed the event close case and it worked... so when they click it, nothing happens...
    1 point
  7. 0xdefea7

    Regex Shows Blank Result

    I do not know much about the regular expression other than the fact that you will need to change it, but this works with what you gave me: Func Socket() Local $TempFileIn = @TempDir & "\_T3mp123.tmp", $TempFileOut = @ScriptDir & "\Google1.txt", $Parsed $keyword = InputBox("Keyword", "Please enter your keyword:") $hDownload = InetGet("http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&output=rss&q=" & $keyword, $TempFileIn, 1, 1) Do Sleep(250) Until InetGetInfo($hDownload, 2) InetClose($hDownload) $Parsed = StringRegExp(FileRead($TempFileIn), "(?<=\&amp\;url\=).*?(?=<\/link><guid)", 1) $hFile = FileOpen($TempFileOut, 2) If Not IsArray($Parsed) Then FileWriteLine($hFile, "No Matches Found :(") Else For $i = 0 To UBound($Parsed) - 1 FileWriteLine($hFile, $Parsed[$i]) Next EndIf FileClose($hFile) Run("notepad.exe " & $TempFileOut) EndFunc ;==>Socket Hope this helps.
    1 point
  8. WOOP!!! WOOP!!!! DANGER WILL ROBINSON!!! DANGER!!! Read the rules.
    1 point
  9. nitekram

    [ask]

    great title and great post, please use code tags for your code, and the title it is a given that you are asking a question other then that, welcome to the forums edit, and what is your question/error message, meaning what do you need help with?
    1 point
  10. Then use something like this: While 1 $sMessage = _Now() & " Test1" & @CRLF Sleep(2000) $sMessage &= _Now() & " Test2" & @CRLF Sleep(2000) $sMessage &= _Now() & " Test3" & @CRLF _LogToFile(@ScriptDir & "test.log", $sMessage) WEnd Collects all messages in a single variable and writes it to the log file at the end of the loop. Notice the "=" in the first assignment and "&=" in the rest.
    1 point
  11. 1 point
  12. An abject lesson to many others here, that is the continual pathway for most of us, as it can't be helped ... if you actually want to learn.
    1 point
  13. UEZ

    Drawing on a window

    Here a basic image editor extracted from an older version of AutoIt Windows Screenshooter which I found on my disk: #include <ComboConstants.au3> #include <EditConstants.au3> #include <GuiMenu.au3> #include <Misc.au3> #include <GuiReBar.au3> #include <ScrollBarConstants.au3> #include <GuiScrollBars.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <GUIConstantsEx.au3> #include <GDIPlus.au3>;~~~ #include <GuiToolbar.au3> #include <StaticConstants.au3> #include <GuiSlider.au3> Opt("MustDeclareVars", 1) Global $sBitmap = FileOpenDialog("Bitte eine Bilddatei laden", "", "Bilder (*.jpg;*.png;*.bmp;*.gif)") If @error Then Exit Global Const $dll = DllOpen("user32.dll") _GDIPlus_Startup() Global $hBmp = _GDIPlus_BitmapCreateFromFile($sBitmap) Global $bW = _GDIPlus_ImageGetWidth($hBmp) Global $bH = _GDIPlus_ImageGetHeight($hBmp) Global $vBitmap, $IE_tmp, $IE_Pix_Size = 8 Global $hGUI_ImageEditor, $hGUI_ImageEditor_Child, $hGUI_ImageEditor_Blur, $idInput_IE_Blur, $hSlider_IE_Blur, $hGUI_ImageEditor_GS, $hSlider_IE_GS, $idInput_IE_GS, $hGUI_ImageEditor_BW, $hSlider_IE_BW, $idInput_IE_BW Global $idInput_IE_H, $idInput_IE_HP, $idInput_IE_W, $idInput_IE_WP, $idChkBox_IE_AR, $idLabel_IE_SizeN Global Enum $idSave_IE = 1500, $idCopy_IE, $idSend_IE, $idUndo_IE, $idPen_IE, $idHighlighter_IE, $idRectangle_IE, $idEllipse_IE, $idArrow_IE, $idColor_IE, $idText_IE, $idText_Conf_IE, $idFX_IE, _ $idFX_IE_GS, $idFX_IE_BW, $idFX_IE_INV, $idFX_IE_BLUR, $idFX_IE_Pix, $idFX_IE_Rast, $idFX_IE_Resize Global Const $hCursor_System = _WinAPI_CopyIcon(_WinAPI_LoadCursor(0, 32512)) Global Const $STM_SETIMAGE = 0x0172 Global $hGUI_ImageEditor, $hGUI_ImageEditor_Child, $idPic_ImageEditor, $hToolbar_IE, $IE_iItem, $TB_Button_Chk, $TB_Menu_Chk, $hPen_IE, $hPenArrow_IE, $hCursor_IE, $IE_Bmp_Undo Global $hGfx_IE, $hGfx_IE_BMP, $hCtx_IE, $hCtx_IE_BMP Global $IE_Pen_Col = 0xFFFF0000, $IE_PenSize = 4, $IE_HL_Col = 0x30FFFF00, $IE_HL_Col_BGR = 0x00FFFF, $IE_HLSize = 20 Global $IE_Brush_Col = 0x30FFFF00 Global $IE_offset_x = 0, $IE_offset_y = 0, $IE_Tool_Selected = 1 Global $IE_ScrollbarH = False, $IE_ScrollbarV = False, $Undo_IE = False Global Enum $idIEPen_Size = 1600, $idIEPen_Size_1px, $idIEPen_Size_2px, $idIEPen_Size_4px, $idIEPen_Size_8px, $idIEPen_Size_16px Global Const $hDll = DllOpen("user32.dll") Global $IE_Dummy_Ras, $IE_Dummy_Pix, $IE_Dummy_Blur, $IE_Dummy_BW, $IE_Dummy_Res Global Const $hMenu_IE_PS = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_AddMenuItem($hMenu_IE_PS, "1 px", $idIEPen_Size_1px) _GUICtrlMenu_AddMenuItem($hMenu_IE_PS, "2 px", $idIEPen_Size_2px) _GUICtrlMenu_AddMenuItem($hMenu_IE_PS, "4 px", $idIEPen_Size_4px) _GUICtrlMenu_AddMenuItem($hMenu_IE_PS, "8 px", $idIEPen_Size_8px) _GUICtrlMenu_AddMenuItem($hMenu_IE_PS, "16 px", $idIEPen_Size_16px) _GUICtrlMenu_CheckRadioItem($hMenu_IE_PS, 0, 5, 2) Global Const $hMenu_IE_FX = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_InsertMenuItem($hMenu_IE_FX, 0, "Grayscale", $idFX_IE_GS) _GUICtrlMenu_InsertMenuItem($hMenu_IE_FX, 1, "Black & White", $idFX_IE_BW) _GUICtrlMenu_InsertMenuItem($hMenu_IE_FX, 2, "Invert", $idFX_IE_INV) _GUICtrlMenu_InsertMenuItem($hMenu_IE_FX, 3, "Blur", $idFX_IE_BLUR) _GUICtrlMenu_InsertMenuItem($hMenu_IE_FX, 4, "Pixelize", $idFX_IE_Pix) _GUICtrlMenu_InsertMenuItem($hMenu_IE_FX, 5, "Rasterize", $idFX_IE_Rast) _GUICtrlMenu_InsertMenuItem($hMenu_IE_FX, 6, "") _GUICtrlMenu_InsertMenuItem($hMenu_IE_FX, 7, "Resize Image", $idFX_IE_Resize) Opt("MouseCoordMode", 2) Opt("GUICloseOnESC", 1) ImageEditor() Opt("MouseCoordMode", 1) Opt("GUICloseOnESC", 0) _WinAPI_SetSystemCursor($hCursor_System, 32512) _WinAPI_DestroyCursor($hCursor_IE) DllClose($dll) _GDIPlus_BitmapDispose($hBmp) _GDIPlus_Shutdown() _GUICtrlMenu_DestroyMenu($hMenu_IE_PS) _GUICtrlMenu_DestroyMenu($hMenu_IE_FX) Exit #region Image Editor Func ImageEditor() Local $hGUI_ImageEditor_W = Int(@DesktopWidth * 0.875) Local $hGUI_ImageEditor_H = Int(@DesktopHeight * 0.875) Local $IE_TB_Style = BitOR($TBSTYLE_FLAT, $TBSTYLE_TRANSPARENT, $CCS_NORESIZE, $CCS_NOPARENTALIGN) Local $hHBITMAP_IE_Icons = Load_BMP_From_Mem(_ImageEditor_ToolbarIcons(), True) $hGUI_ImageEditor = GUICreate("AutoIt Windows Screenshooter Basic Image Editor / Image Info: " & $bW & "x" & $bH & " pixel", $hGUI_ImageEditor_W, $hGUI_ImageEditor_H) GUISetBkColor(0xDBE3DE, $hGUI_ImageEditor) $hToolbar_IE = _GUICtrlToolbar_Create($hGUI_ImageEditor, $IE_TB_Style) Local $idToolbar_IE = _WinAPI_GetDlgCtrlID($hToolbar_IE) Local $hReBar = _GUICtrlRebar_Create($hGUI_ImageEditor, BitOR($CCS_TOP, $RBS_VARHEIGHT, $RBS_AUTOSIZE, $RBS_BANDBORDERS)) Local $aStrings[14] Local $aInfo = ControlGetPos($hGUI_ImageEditor, "AutoIt Windows Screenshooter Basic Image Editor", $idToolbar_IE) Local $height_delta = 54 #region Toolbar $aStrings[0] = _GUICtrlToolbar_AddString($hToolbar_IE, " &Save ") $aStrings[1] = _GUICtrlToolbar_AddString($hToolbar_IE, " &Copy ") $aStrings[2] = _GUICtrlToolbar_AddString($hToolbar_IE, " S&end ") $aStrings[3] = _GUICtrlToolbar_AddString($hToolbar_IE, "&Undo") $aStrings[4] = _GUICtrlToolbar_AddString($hToolbar_IE, " &Pen ") $aStrings[5] = _GUICtrlToolbar_AddString($hToolbar_IE, "Pen S&ize") $aStrings[6] = _GUICtrlToolbar_AddString($hToolbar_IE, "&Highlighter") $aStrings[7] = _GUICtrlToolbar_AddString($hToolbar_IE, "&Rectangle") $aStrings[8] = _GUICtrlToolbar_AddString($hToolbar_IE, "&Ellipse") $aStrings[9] = _GUICtrlToolbar_AddString($hToolbar_IE, "&Arrow") $aStrings[10] = _GUICtrlToolbar_AddString($hToolbar_IE, "C&olor") $aStrings[11] = _GUICtrlToolbar_AddString($hToolbar_IE, " &Text ") $aStrings[12] = _GUICtrlToolbar_AddString($hToolbar_IE, "Confi&g") $aStrings[13] = _GUICtrlToolbar_AddString($hToolbar_IE, "F&X") _GUICtrlToolbar_SetBitmapSize($hToolbar_IE, 24, 24) _GUICtrlToolbar_AddBitmap($hToolbar_IE, 1, 0, $hHBITMAP_IE_Icons) _GUICtrlToolbar_AddButton($hToolbar_IE, $idSave_IE, 2, $aStrings[0], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButtonSep($hToolbar_IE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idCopy_IE, 3, $aStrings[1], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idSend_IE, 4, $aStrings[2], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButtonSep($hToolbar_IE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idUndo_IE, 0, $aStrings[3], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButtonSep($hToolbar_IE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idHighlighter_IE, 6, $aStrings[6], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButtonSep($hToolbar_IE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idPen_IE, 5, $aStrings[4], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idIEPen_Size, 8, $aStrings[5], $BTNS_DROPDOWN + $BTNS_WHOLEDROPDOWN + $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idRectangle_IE, 9, $aStrings[7], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idEllipse_IE, 10, $aStrings[8], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idArrow_IE, 11, $aStrings[9], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idColor_IE, 12, $aStrings[10], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButtonSep($hToolbar_IE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idText_IE, 13, $aStrings[11], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idText_Conf_IE, 14, $aStrings[12], $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButtonSep($hToolbar_IE) _GUICtrlToolbar_AddButton($hToolbar_IE, $idFX_IE, 15, $aStrings[13], $BTNS_DROPDOWN + $BTNS_WHOLEDROPDOWN + $BTNS_AUTOSIZE) _GUICtrlToolbar_AddButtonSep($hToolbar_IE) #endregion Local $hHBitmap_ImageEditor = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp) $hGUI_ImageEditor_Child = GUICreate("", $hGUI_ImageEditor_W, $hGUI_ImageEditor_H - $height_delta, 0, $height_delta, $WS_POPUP, $WS_EX_MDICHILD, $hGUI_ImageEditor) GUISetBkColor(0x808080, $hGUI_ImageEditor_Child) If $bW < $hGUI_ImageEditor_W Or $bH < ($hGUI_ImageEditor_H - $height_delta) Then $IE_offset_x = -($hGUI_ImageEditor_W - $bW) / 2 $IE_offset_y = -(($hGUI_ImageEditor_H - $height_delta) - $bH) / 2 $idPic_ImageEditor = GUICtrlCreatePic("", $IE_offset_x * - 1, ($hGUI_ImageEditor_H - $bH) / 2 - $height_delta / 2, $bW, $bH) Else $idPic_ImageEditor = GUICtrlCreatePic("", 0, 0, $bW, $bH) EndIf _WinAPI_DeleteObject(GUICtrlSendMsg($idPic_ImageEditor, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap_ImageEditor)) _WinAPI_DeleteObject($hHBitmap_ImageEditor) _GUICtrlRebar_AddToolBarBand($hReBar, $hToolbar_IE, "", 0) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idPen_IE) Local $iVSscroll = _WinAPI_GetSystemMetrics(2) Local $iHSscroll = _WinAPI_GetSystemMetrics(3) Local $iYCaption = _WinAPI_GetSystemMetrics(4) Local $iYFixedFrame = _WinAPI_GetSystemMetrics(8) Local $iXFixedFrame = _WinAPI_GetSystemMetrics(7) Local $iMetricsSumX = ($bH > ($hGUI_ImageEditor_H - $height_delta)) * $iVSscroll + $iXFixedFrame * 2 Local $iMetricsSumY = ($bW > $hGUI_ImageEditor_W) * $iHSscroll + $iYCaption + $iYFixedFrame ;~ For $a = 0 To 100 ;~ ConsoleWrite($a & ": " & _WinAPI_GetSystemMetrics($a) & @LF) ;~ Next If @OSBuild < 6000 Then DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", $hToolbar_IE, "wstr", "", "wstr", "") $IE_TB_Style = BitOR($TBSTYLE_FLAT, $TBSTYLE_TRANSPARENT) EndIf If $bW > $hGUI_ImageEditor_W Or $bH > ($hGUI_ImageEditor_H - $height_delta) Then ;~ GUISetStyle($WS_POPUP + $WS_HSCROLL + $WS_VSCROLL, $WS_EX_MDICHILD, $hGUI_ImageEditor_Child) _GUIScrollBars_Init($hGUI_ImageEditor_Child) _GUIScrollBars_SetScrollInfoMin($hGUI_ImageEditor_Child, $SB_HORZ, 0) _GUIScrollBars_SetScrollInfoMax($hGUI_ImageEditor_Child, $SB_HORZ, $bW - $hGUI_ImageEditor_W + 61 + $iMetricsSumX) _GUIScrollBars_SetScrollInfoMin($hGUI_ImageEditor_Child, $SB_VERT, 0) _GUIScrollBars_SetScrollInfoMax($hGUI_ImageEditor_Child, $SB_VERT, $bH - $hGUI_ImageEditor_H + $iMetricsSumY + $height_delta - 1) GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL_IE") GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL_IE") GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL_IE") GUISetState(@SW_SHOW, $hGUI_ImageEditor) GUISetState(@SW_SHOW, $hGUI_ImageEditor_Child) If $bW > $hGUI_ImageEditor_W Then WM_HSCROLL_IE($hGUI_ImageEditor_Child, 0, $SB_THUMBTRACK, 0) $IE_ScrollbarH = True EndIf If $bH > ($hGUI_ImageEditor_H - $height_delta) Then WM_VSCROLL_IE($hGUI_ImageEditor_Child, 0, $SB_THUMBTRACK, 0) $IE_ScrollbarV = True EndIf Else GUISetState(@SW_SHOW, $hGUI_ImageEditor) GUISetState(@SW_SHOW, $hGUI_ImageEditor_Child) EndIf Local $hWnd_Title_Icon = Load_BMP_From_Mem(_WinTitle_Icon()) Local $hIcon_New = _WinAPI_SetWindowTitleIcon($hWnd_Title_Icon, $hGUI_ImageEditor) $TB_Button_Chk = GUICtrlCreateDummy() Local $mx, $my, $mxo, $myo, $aCI, $cc, $hIE_Bmp_Txt, $hIE_Bmp_Ctx Local $aIETxtFont[8] = [7, 0, "Arial", 24, 400, 0, 0, 0xFF0000] Local $hBrush_IE = _GDIPlus_BrushCreateSolid($IE_Brush_Col) $hPen_IE = _GDIPlus_PenCreate($IE_Pen_Col, $IE_PenSize) $hPenArrow_IE = _GDIPlus_PenCreate($IE_Pen_Col, $IE_PenSize) Local $arrow_len = 7 ;Int($bW / 80) Local $hEndCap = _GDIPlus_ArrowCapCreate($arrow_len, Int($arrow_len * 0.66)) _GDIPlus_PenSetCustomEndCap($hPenArrow_IE, $hEndCap) Local $hHL_IE = _GDIPlus_PenCreate($IE_HL_Col, $IE_HLSize) $hGfx_IE = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($idPic_ImageEditor)) $hGfx_IE_BMP = _GDIPlus_BitmapCreateFromGraphics($bW, $bH, $hGfx_IE) $hCtx_IE = _GDIPlus_ImageGetGraphicsContext($hGfx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hGfx_IE, 2) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE, 2) Local $startX, $startY, $area, $hGUI_ImageEditor_EnterTxt, $idEdit_IE, $idButton_IE, $IE_Text, $aTxt_Size, $aResult, $aBuffer, $keyDLL, $hCursor_IE_tmp Local $iMax, $hIE_Bmp_Rot, $hIE_Bmp_Ctx_Rot, $hIE_Matrix, $r Local $IE_Child_Active = False, $ESC_IE = False $IE_Dummy_Blur = GUICtrlCreateDummy() $IE_Dummy_BW = GUICtrlCreateDummy() $IE_Dummy_Pix = GUICtrlCreateDummy() $IE_Dummy_Ras = GUICtrlCreateDummy() $IE_Dummy_Res = GUICtrlCreateDummy() Local $blur_go, $idLabel_IE_Blur, $idButton_IE_Blur, $blur_val Local $bw_go, $BW_val, $idLabel_IE_BW, $idButton_IE_BW Local $pix_go, $hGUI_IE_PixelizeConf, $idInput_IE_PC, $idLabel_Pixel, $idButton_IE_OK, $hBild Local $rast_go, $iColor_Rasterize, $hGUI_ImageEditor_Raster, $idLabel_IE_Raster, $idLabel_IE_Raster_Color, $idButton_IE_Color, $idButton_IE_Color_Start, $idGraphic_Color Local $hGUI_IE_Resize, $idGroup_IE_ISize, $idLabel_IE_Current, $idLabel_IE_New, $idLabel_IE_SizeC, $idGroup_IE_INSize, $idLabel_IE_W1, $idLabel_IE_x, $idLabel_IE_H1, $idLabel_IE_W2, $idLabel_IE_P1, _ $idLabel_IE_P2, $idLabel_IE_H2, $idButton_IE_IHalf, $idButton_IE_IDouble, $idGroup_IE_IMethod, $idCombo_IE, $idButton_IE_Cancel $hCursor_IE = _WinAPI_CreateSolidCursorFromBitmap($IE_PenSize, $IE_PenSize, BitOR(BitShift(BitAND($IE_Pen_Col, 0x000000FF), -16), BitAND($IE_Pen_Col, 0x0000FF00), BitShift(BitAND($IE_Pen_Col, 0x00FF0000), 16))) $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) If (Not @error) And $aCI[4] = $idPic_ImageEditor Then _WinAPI_SetCursor($hCursor_IE) GUIRegisterMsg($WM_COMMAND, "WM_COMMAND_IE") GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY_IE") GUIRegisterMsg($WM_SETCURSOR, "WM_SETCURSOR") Local $m1 = False, $m2 = False Local $aCoord[0xFFFFF][2], $z Do If WinActive($hGUI_ImageEditor) Or WinActive($hGUI_ImageEditor_Child) Then $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) Switch $aCI[4] Case 0 If Not $m2 Then WinActivate($hGUI_ImageEditor) $m1 = False $m2 = True EndIf Case Else If Not $m1 Then ControlClick($hGUI_ImageEditor_Child, "", $idPic_ImageEditor) WinActivate($hGUI_ImageEditor_Child) $m1 = True $m2 = False EndIf EndSwitch ;~ ConsoleWrite(ControlGetFocus($hGUI_ImageEditor_Child) & @CRLF) ;~ If $aCI[4] = $idPic_ImageEditor And WinActive($hGUI_ImageEditor) Then ;~ ControlClick($hGUI_ImageEditor_Child, "", $idPic_ImageEditor) ;~ WinActivate($hGUI_ImageEditor_Child) ;~ EndIf If $aCI[2] And $aCI[4] = $idPic_ImageEditor And WinActive($hGUI_ImageEditor_Child) Then _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True Switch $IE_Tool_Selected Case 1 ;pen _GDIPlus_GraphicsDrawImageRect($hCtx_IE, $hBmp, 0, 0, $bW, $bH) Dim $aCoord[0xFFFFF][2] $z = 0 $aCoord[0][0] = $z Do $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) $z += 1 $aCoord[0][0] = $z $aCoord[$z][0] = ($aCI[0] + $IE_PenSize / 2) + $IE_offset_x $aCoord[$z][1] = ($aCI[1] + $IE_PenSize / 2) + $IE_offset_y _GDIPlus_GraphicsDrawCurve2($hGfx_IE, $aCoord, 0.01, $hPen_IE) Until Not $aCI[2] * Sleep(10) ReDim $aCoord[$z + 1][2] _GDIPlus_GraphicsDrawCurve2($hCtx_IE, $aCoord, 0.01, $hPen_IE) _GDIPlus_GraphicsDrawImageRect($hCtx_IE_BMP, $hGfx_IE_BMP, 0, 0, $bW, $bH) CopyImage2Control($idPic_ImageEditor) Case 2 ;highlighter _GDIPlus_GraphicsDrawImageRect($hCtx_IE, $hBmp, 0, 0, $bW, $bH) Dim $aCoord[0xFFFFF][2] $z = 0 $aCoord[0][0] = $z Local $hBrush_IE_HL = _GDIPlus_BrushCreateSolid($IE_HL_Col) _GDIPlus_GraphicsDrawImageRect($hCtx_IE, $hBmp, 0, 0, $bW, $bH) Do $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) _GDIPlus_GraphicsFillRect($hGfx_IE, $aCI[0] + $IE_offset_x, $aCI[1] + $IE_offset_y, $IE_HLSize, $IE_HLSize, $hBrush_IE_HL) _GDIPlus_GraphicsFillRect($hCtx_IE, $aCI[0] + $IE_offset_x, $aCI[1] + $IE_offset_y, $IE_HLSize, $IE_HLSize, $hBrush_IE_HL) Until Not $aCI[2] * Sleep(15) _GDIPlus_BrushDispose($hBrush_IE_HL) _GDIPlus_GraphicsDrawImageRect($hCtx_IE_BMP, $hGfx_IE_BMP, 0, 0, $bW, $bH) CopyImage2Control($idPic_ImageEditor) ;~ _GDIPlus_GraphicsDrawImageRect($hCtx_IE, $hBmp, 0, 0, $bW, $bH) ;~ $mxo = MouseGetPos(0) + $IE_HLSize / 2 ;~ $myo = MouseGetPos(1) + $IE_HLSize / 2 ;~ Do ;~ $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) ;~ _GDIPlus_GraphicsDrawLine($hGfx_IE, ($aCI[0] + $IE_HLSize / 2) + $IE_offset_x, ($aCI[1] + $IE_HLSize / 2) + $IE_offset_y, $mxo + $IE_offset_x, $myo + $IE_offset_y, $hHL_IE) ;~ _GDIPlus_GraphicsDrawLine($hCtx_IE, ($aCI[0] + $IE_HLSize / 2) + $IE_offset_x, ($aCI[1] + $IE_HLSize / 2) + $IE_offset_y, $mxo + $IE_offset_x, $myo + $IE_offset_y, $hHL_IE) ;~ $mxo = $aCI[0] + $IE_HLSize / 2 ;~ $myo = $aCI[1] + $IE_HLSize / 2 ;~ Until Not $aCI[2] * Sleep(1) ;~ _GDIPlus_GraphicsDrawImageRect($hCtx_IE_BMP, $hGfx_IE_BMP, 0, 0, $bW, $bH) Case 3 ;rectangle $startX = MouseGetPos(0) - $IE_offset_x * - 1 + $IE_PenSize / 2 $mxo = $startX $startY = MouseGetPos(1) - $IE_offset_y * - 1 + $IE_PenSize / 2 $myo = $startY Do $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) $mx = $aCI[0] - $IE_offset_x * - 1 + $IE_PenSize / 2 $my = $aCI[1] - $IE_offset_y * - 1 + $IE_PenSize / 2 If $mx <> $mxo Or $my <> $myo Then _GDIPlus_GraphicsDrawImageRect($hCtx_IE, $hBmp, 0, 0, $bW, $bH) If $startX < $mx And $startY < $my Then _GDIPlus_GraphicsDrawRect($hCtx_IE, $startX, $startY, Abs($startX - $mx), Abs($startY - $my), $hPen_IE) ElseIf $startX > $mx And $startY < $my Then _GDIPlus_GraphicsDrawRect($hCtx_IE, $mx, $startY, Abs($startX - $mx), Abs($startY - $my), $hPen_IE) ElseIf $startX < $mx And $startY > $my Then _GDIPlus_GraphicsDrawRect($hCtx_IE, $startX, $my, Abs($startX - $mx), Abs($startY - $my), $hPen_IE) Else _GDIPlus_GraphicsDrawRect($hCtx_IE, $mx, $my, Abs($startX - $mx), Abs($startY - $my), $hPen_IE) EndIf _GDIPlus_GraphicsDrawImageRect($hGfx_IE, $hGfx_IE_BMP, 0, 0, $bW, $bH) $mxo = $mx $myo = $my EndIf Until Not $aCI[2] * Sleep(10) _GDIPlus_GraphicsDrawImageRect($hCtx_IE_BMP, $hGfx_IE_BMP, 0, 0, $bW, $bH) CopyImage2Control($idPic_ImageEditor) Case 4 ;ellipse $startX = MouseGetPos(0) - $IE_offset_x * - 1 + $IE_PenSize / 2 $mxo = $startX $startY = MouseGetPos(1) - $IE_offset_y * - 1 + $IE_PenSize / 2 $myo = $startY Do $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) $mx = $aCI[0] - $IE_offset_x * - 1 + $IE_PenSize / 2 $my = $aCI[1] - $IE_offset_y * - 1 + $IE_PenSize / 2 If $mx <> $mxo Or $my <> $myo Then _GDIPlus_GraphicsDrawImageRect($hCtx_IE, $hBmp, 0, 0, $bW, $bH) If $startX < $mx And $startY < $my Then _GDIPlus_GraphicsDrawEllipse($hCtx_IE, $startX, $startY, Abs($startX - $mx), Abs($startY - $my), $hPen_IE) ElseIf $startX > $mx And $startY < $my Then _GDIPlus_GraphicsDrawEllipse($hCtx_IE, $mx, $startY, Abs($startX - $mx), Abs($startY - $my), $hPen_IE) ElseIf $startX < $mx And $startY > $my Then _GDIPlus_GraphicsDrawEllipse($hCtx_IE, $startX, $my, Abs($startX - $mx), Abs($startY - $my), $hPen_IE) Else _GDIPlus_GraphicsDrawEllipse($hCtx_IE, $mx, $my, Abs($startX - $mx), Abs($startY - $my), $hPen_IE) EndIf _GDIPlus_GraphicsDrawImageRect($hGfx_IE, $hGfx_IE_BMP, 0, 0, $bW, $bH) $mxo = $mx $myo = $my EndIf Until Not $aCI[2] * Sleep(10) _GDIPlus_GraphicsDrawImageRect($hCtx_IE_BMP, $hGfx_IE_BMP, 0, 0, $bW, $bH) CopyImage2Control($idPic_ImageEditor) Case 5 ;arrow $startX = MouseGetPos(0) - $IE_offset_x * - 1 + $IE_PenSize / 2 $mxo = $startX $startY = MouseGetPos(1) - $IE_offset_y * - 1 + $IE_PenSize / 2 $myo = $startY Do $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) $mx = $aCI[0] - $IE_offset_x * - 1 + $IE_PenSize / 2 $my = $aCI[1] - $IE_offset_y * - 1 + $IE_PenSize / 2 If $mx <> $mxo Or $my <> $myo Then _GDIPlus_GraphicsDrawImageRect($hCtx_IE, $hBmp, 0, 0, $bW, $bH) _GDIPlus_GraphicsDrawLine($hCtx_IE, $startX, $startY, $mx, $my, $hPenArrow_IE) _GDIPlus_GraphicsDrawImageRect($hGfx_IE, $hGfx_IE_BMP, 0, 0, $bW, $bH) $mxo = $mx $myo = $my EndIf Until Not $aCI[2] * Sleep(10) _GDIPlus_GraphicsDrawImageRect($hCtx_IE_BMP, $hGfx_IE_BMP, 0, 0, $bW, $bH) CopyImage2Control($idPic_ImageEditor) EndSwitch EndIf Switch GUIGetMsg() Case $GUI_EVENT_CLOSE If $ESC_IE Then $ESC_IE = False Else ExitLoop EndIf Case $TB_Button_Chk Switch GUICtrlRead($TB_Button_Chk) Case $idSave_IE Save_Bitmap() Case $idUndo_IE If $Undo_IE Then $bW = _GDIPlus_ImageGetWidth($IE_Bmp_Undo) $bH = _GDIPlus_ImageGetHeight($IE_Bmp_Undo) _GDIPlus_BitmapDispose($hBmp) $hBmp = $IE_Bmp_Undo WinSetTitle($hGUI_ImageEditor, "", "AutoIt Windows Screenshooter Basic Image Editor / Image Info: " & $bW & "x" & $bH & " pixel") If $bW < $hGUI_ImageEditor_W Or $bH < ($hGUI_ImageEditor_H - $height_delta) Then $IE_offset_x = -($hGUI_ImageEditor_W - $bW) / 2 $IE_offset_y = -(($hGUI_ImageEditor_H - $height_delta) - $bH) / 2 GUICtrlSetPos($idPic_ImageEditor, $IE_offset_x * - 1, ($hGUI_ImageEditor_H - $bH) / 2 - $height_delta / 2, $bW, $bH) Else GUICtrlSetPos($idPic_ImageEditor, 0, 0, $bW, $bH) EndIf $iMetricsSumX = ($bH > ($hGUI_ImageEditor_H - $height_delta)) * $iVSscroll + $iXFixedFrame * 2 $iMetricsSumY = ($bW > $hGUI_ImageEditor_W) * $iHSscroll + $iYCaption + $iYFixedFrame _WinAPI_DeleteObject(GUICtrlSendMsg($idPic_ImageEditor, $STM_SETIMAGE, $IMAGE_BITMAP, 0)) _Functions_RemoveScrollBars($hGUI_ImageEditor_Child) $IE_ScrollbarH = False $IE_ScrollbarV = False If $bW > $hGUI_ImageEditor_W Or $bH > ($hGUI_ImageEditor_H - $height_delta) Then _GUIScrollBars_Init($hGUI_ImageEditor_Child) _GUIScrollBars_SetScrollInfoMin($hGUI_ImageEditor_Child, $SB_HORZ, 0) _GUIScrollBars_SetScrollInfoMax($hGUI_ImageEditor_Child, $SB_HORZ, $bW - $hGUI_ImageEditor_W + 61 + $iMetricsSumX) _GUIScrollBars_SetScrollInfoMin($hGUI_ImageEditor_Child, $SB_VERT, 0) _GUIScrollBars_SetScrollInfoMax($hGUI_ImageEditor_Child, $SB_VERT, $bH - $hGUI_ImageEditor_H + $iMetricsSumY + $height_delta - 1) GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL_IE") GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL_IE") GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL_IE") If $bW > $hGUI_ImageEditor_W Then WM_HSCROLL_IE($hGUI_ImageEditor_Child, 0, $SB_THUMBTRACK, 0) $IE_ScrollbarH = True EndIf If $bH > ($hGUI_ImageEditor_H - $height_delta) Then WM_VSCROLL_IE($hGUI_ImageEditor_Child, 0, $SB_THUMBTRACK, 0) $IE_ScrollbarV = True EndIf EndIf _GDIPlus_GraphicsDispose($hGfx_IE) _GDIPlus_GraphicsDispose($hCtx_IE) _GDIPlus_ImageDispose($hCtx_IE_BMP) _GDIPlus_BitmapDispose($hGfx_IE_BMP) $hGfx_IE = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($idPic_ImageEditor)) $hGfx_IE_BMP = _GDIPlus_BitmapCreateFromGraphics($bW, $bH, $hGfx_IE) $hCtx_IE = _GDIPlus_ImageGetGraphicsContext($hGfx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE_BMP, 2) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE, 2) _GDIPlus_GraphicsSetSmoothingMode($hGfx_IE, 2) CopyImage2Control($idPic_ImageEditor) ;~ _GDIPlus_GraphicsDrawImage($hCtx_IE, $IE_Bmp_Undo, 0, 0) ;~ _GDIPlus_GraphicsDrawImageRect($hCtx_IE_BMP, $hGfx_IE_BMP, 0, 0, $bW, $bH) $Undo_IE = False EndIf Case $idPen_IE $IE_Tool_Selected = 1 _GUICtrlToolbar_CheckButton($hToolbar_IE, $idUndo_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idPen_IE) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idIEPen_Size, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idHighlighter_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idRectangle_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idEllipse_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idArrow_IE, False) _WinAPI_DestroyCursor($hCursor_IE) $hCursor_IE = _WinAPI_CreateSolidCursorFromBitmap($IE_PenSize, $IE_PenSize, BitOR(BitShift(BitAND($IE_Pen_Col, 0x000000FF), -16), BitAND($IE_Pen_Col, 0x0000FF00), BitShift(BitAND($IE_Pen_Col, 0x00FF0000), 16))) $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) If (Not @error) And $aCI[4] = $idPic_ImageEditor Then _WinAPI_SetCursor($hCursor_IE) Case $idHighlighter_IE $IE_Tool_Selected = 2 _GUICtrlToolbar_CheckButton($hToolbar_IE, $idUndo_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idPen_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idIEPen_Size, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idHighlighter_IE) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idRectangle_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idEllipse_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idArrow_IE, False) _WinAPI_DestroyCursor($hCursor_IE) $hCursor_IE = _WinAPI_CreateSolidCursorFromBitmap(16, $IE_HLSize, $IE_HL_Col_BGR) $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) If (Not @error) And $aCI[4] = $idPic_ImageEditor Then _WinAPI_SetCursor($hCursor_IE) Case $idRectangle_IE $IE_Tool_Selected = 3 _GUICtrlToolbar_CheckButton($hToolbar_IE, $idUndo_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idPen_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idIEPen_Size, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idHighlighter_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idRectangle_IE) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idEllipse_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idArrow_IE, False) Case $idEllipse_IE $IE_Tool_Selected = 4 _GUICtrlToolbar_CheckButton($hToolbar_IE, $idUndo_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idPen_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idIEPen_Size, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idHighlighter_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idRectangle_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idEllipse_IE) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idArrow_IE, False) Case $idArrow_IE $IE_Tool_Selected = 5 _GUICtrlToolbar_CheckButton($hToolbar_IE, $idUndo_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idPen_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idIEPen_Size, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idHighlighter_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idRectangle_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idEllipse_IE, False) _GUICtrlToolbar_CheckButton($hToolbar_IE, $idArrow_IE) Case $idColor_IE $cc = _ChooseColor(2, 0xFF0000, 2, $hGUI_ImageEditor) If Not @error Then $IE_Pen_Col = "0xFF" & Hex($cc, 6) _GDIPlus_PenSetColor($hPen_IE, $IE_Pen_Col) _GDIPlus_PenSetColor($hPenArrow_IE, $IE_Pen_Col) $hCursor_IE = _WinAPI_CreateSolidCursorFromBitmap($IE_PenSize, $IE_PenSize, BitOR(BitShift(BitAND($IE_Pen_Col, 0x000000FF), -16), BitAND($IE_Pen_Col, 0x0000FF00), BitShift(BitAND($IE_Pen_Col, 0x00FF0000), 16))) $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) If (Not @error) And $aCI[4] = $idPic_ImageEditor Then _WinAPI_SetCursor($hCursor_IE) EndIf Case $idText_IE $hGUI_ImageEditor_EnterTxt = GUICreate("Enter Text", 500, 370, -1, -1, $WS_SYSMENU, Default, $hGUI_ImageEditor) $idEdit_IE = GUICtrlCreateEdit("", 2, 2, 490, 290) GUICtrlSetFont(-1, $aIETxtFont[3], $aIETxtFont[4], $aIETxtFont[1], $aIETxtFont[2], 5) GUICtrlSetColor(-1, $aIETxtFont[7]) $idButton_IE = GUICtrlCreateButton("Finish", 0, 295, 494, 48) GUICtrlSetFont(-1, 20) GUISetState(@SW_SHOW, $hGUI_ImageEditor_EnterTxt) Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idButton_IE ExitLoop EndSwitch Until False $IE_Text = GUICtrlRead($idEdit_IE) GUIDelete($hGUI_ImageEditor_EnterTxt) If $IE_Text <> "" Then $aTxt_Size = GetStringSize($IE_Text, $aIETxtFont[2], $aIETxtFont[3], $aIETxtFont[1]) $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $aTxt_Size[0], "int", $aTxt_Size[1], "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) $hIE_Bmp_Txt = $aResult[6] $hIE_Bmp_Ctx = _GDIPlus_ImageGetGraphicsContext($hIE_Bmp_Txt) _GDIPlus_GraphicsSetSmoothingMode($hIE_Bmp_Ctx, 2) DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hIE_Bmp_Ctx, "int", 4) _GDIPlus_GraphicsDrawString2($hIE_Bmp_Ctx, $IE_Text, $aIETxtFont[2], $aIETxtFont[3], $aIETxtFont[1], 0xFF000000 + $aIETxtFont[7]) $hCursor_IE_tmp = _WinAPI_CopyImage($hCursor_IE, $IMAGE_CURSOR) _WinAPI_DestroyCursor($hCursor_IE) $hCursor_IE = _WinAPI_CreateSolidCursorFromBitmap(4, 4, BitOR(0x10000 * BitXOR(BitAND(BitShift($aIETxtFont[7], 16), 0xFF), 0xFF), 0x100 * BitXOR(BitAND(BitShift($aIETxtFont[7], 8), 0xFF), 0xFF), BitXOR(BitAND($aIETxtFont[7], 0xFF), 0xFF))) _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True Do $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) $mx = $aCI[0] - $IE_offset_x * - 1 - $aTxt_Size[0] / 2 $my = $aCI[1] - $IE_offset_y * - 1 - $aTxt_Size[1] If $mx <> $mxo Or $my <> $myo Then _GDIPlus_GraphicsDrawImage($hCtx_IE, $hBmp, 0, 0) _GDIPlus_GraphicsDrawImageRect($hCtx_IE, $hIE_Bmp_Txt, $mx, $my, $aTxt_Size[0], $aTxt_Size[1]) _GDIPlus_GraphicsDrawImageRect($hGfx_IE, $hGfx_IE_BMP, 0, 0, $bW, $bH) $mxo = $mx $myo = $my EndIf If _IsPressed("1B", $dll) Then $ESC_IE = True Until ($aCI[2] * Sleep(20)) Or $ESC_IE If Not $ESC_IE Then $iMax = 2 * Max($aTxt_Size[0], $aTxt_Size[1]) $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iMax, "int", $iMax, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) $hIE_Bmp_Rot = $aResult[6] $hIE_Bmp_Ctx_Rot = _GDIPlus_ImageGetGraphicsContext($hIE_Bmp_Rot) $hIE_Matrix = _GDIPlus_MatrixCreate() _GDIPlus_MatrixTranslate($hIE_Matrix, $iMax / 2, $iMax / 2) $mxo = MouseGetPos(0) $r = 0 Do $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) _GDIPlus_GraphicsDrawImage($hCtx_IE, $hBmp, 0, 0) _GDIPlus_GraphicsClear($hIE_Bmp_Ctx_Rot, 0x00000000) If $mxo < $aCI[0] Then $r = 2 $mxo = $aCI[0] ElseIf $mxo > $aCI[0] Then $r = -2 $mxo = $aCI[0] Else $r = 0 EndIf _GDIPlus_MatrixRotate($hIE_Matrix, $r) _GDIPlus_GraphicsSetTransform($hIE_Bmp_Ctx_Rot, $hIE_Matrix) _GDIPlus_GraphicsDrawImage($hIE_Bmp_Ctx_Rot, $hIE_Bmp_Txt, -$aTxt_Size[0] / 2, -$aTxt_Size[1] / 2) _GDIPlus_GraphicsDrawImage($hCtx_IE, $hIE_Bmp_Rot, $mx - $iMax / 2 + $aTxt_Size[0] / 2, $my - $iMax / 2 + $aTxt_Size[1] / 2) _GDIPlus_GraphicsDrawImageRect($hGfx_IE, $hGfx_IE_BMP, 0, 0, $bW, $bH) Until (Not $aCI[2]) * Sleep(20) _GDIPlus_GraphicsDrawImageRect($hCtx_IE_BMP, $hGfx_IE_BMP, 0, 0, $bW, $bH) CopyImage2Control($idPic_ImageEditor) _GDIPlus_MatrixDispose($hIE_Matrix) _GDIPlus_BitmapDispose($hIE_Bmp_Rot) _GDIPlus_GraphicsDispose($hIE_Bmp_Ctx_Rot) _WinAPI_DestroyCursor($hCursor_IE) $hCursor_IE = $hCursor_IE_tmp Else _GDIPlus_GraphicsDrawImage($hGfx_IE, $hBmp, 0, 0) EndIf _GDIPlus_BitmapDispose($hIE_Bmp_Txt) _GDIPlus_GraphicsDispose($hIE_Bmp_Ctx) EndIf Case $idText_Conf_IE $aBuffer = $aIETxtFont ;save array because when _ChooseFont() has been cancelled the array will be deleted! $aIETxtFont = _ChooseFont("Arial", 24, 0x0000FF) ;BGR If @error Then $aIETxtFont = $aBuffer EndSwitch Case $IE_Dummy_Blur $blur_go = True $hGUI_ImageEditor_Blur = GUICreate("Blur Setting", 332, 118, -1, -1, BitOR($WS_SYSMENU, $WS_GROUP), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE, $WS_EX_TOPMOST), $hGUI_ImageEditor) $hSlider_IE_Blur = _GUICtrlSlider_Create($hGUI_ImageEditor_Blur, 10, 40, 310, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE, $WS_TABSTOP)) _GUICtrlSlider_SetRangeMin($hSlider_IE_Blur, 1) _GUICtrlSlider_SetRangeMax($hSlider_IE_Blur, 900) _GUICtrlSlider_SetPos($hSlider_IE_Blur, 1000 - 333) $idLabel_IE_Blur = GUICtrlCreateLabel("Blur Strength", 20, 12, 83, 23) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") $idInput_IE_Blur = GUICtrlCreateInput(1 - 0.333, 112, 8, 95, 27, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") $idButton_IE_Blur = GUICtrlCreateButton("Start", 224, 8, 80, 27) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") GUISetState(@SW_SHOW, $hGUI_ImageEditor_Blur) ControlFocus($hGUI_ImageEditor_Blur, "", $idButton_IE_Blur) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE $blur_go = False ExitLoop Case $idButton_IE_Blur $blur_val = (1000 - _GUICtrlSlider_GetPos($hSlider_IE_Blur)) / 1000 ExitLoop EndSwitch $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Blur) If $aCI[2] Then GUICtrlSetData($idInput_IE_Blur, Round(($IE_tmp / 1000), 4)) WEnd GUIDelete($hGUI_ImageEditor_Blur) If $blur_go Then Local $hBild _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True $hBild = _Blur($hBmp, $bW, $bH, 0, 0, 0, 0, $blur_val) _GDIPlus_BitmapDispose($hBmp) $hBmp = $hBild CopyImage2Control($idPic_ImageEditor) _GDIPlus_GraphicsDispose($hCtx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE_BMP, 2) EndIf WinActivate($hGUI_ImageEditor_Child) Case $IE_Dummy_BW $BW_val = 160 $bw_go = True $hGUI_ImageEditor_BW = GUICreate("Black&White Setting", 332, 118, -1, -1, BitOR($WS_SYSMENU, $WS_GROUP), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE, $WS_EX_TOPMOST), $hGUI_ImageEditor) $hSlider_IE_BW = _GUICtrlSlider_Create($hGUI_ImageEditor_BW, 10, 40, 310, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE, $WS_TABSTOP)) _GUICtrlSlider_SetRangeMin($hSlider_IE_BW, 1) _GUICtrlSlider_SetRangeMax($hSlider_IE_BW, 255) _GUICtrlSlider_SetPos($hSlider_IE_BW, $BW_val) $idLabel_IE_BW = GUICtrlCreateLabel("Black/White Treshold", 20, 2, 83, 33) GUICtrlSetFont(-1, 11, 400, 0, "Times New Roman") $idInput_IE_BW = GUICtrlCreateInput($BW_val, 112, 8, 95, 27, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") $idButton_IE_BW = GUICtrlCreateButton("Start", 224, 8, 80, 27) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") GUISetState(@SW_SHOW, $hGUI_ImageEditor_BW) ControlFocus($hGUI_ImageEditor_BW, "", $idButton_IE_BW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE $bw_go = False GUIDelete($hGUI_ImageEditor_BW) ExitLoop Case $idButton_IE_BW $BW_val = _GUICtrlSlider_GetPos($hSlider_IE_BW) GUIDelete($hGUI_ImageEditor_BW) ExitLoop EndSwitch $aCI = GUIGetCursorInfo($hGUI_ImageEditor_BW) If $aCI[2] Then GUICtrlSetData($idInput_IE_BW, $IE_tmp) WEnd If $bw_go Then _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True ASM_Bitmap_Grey_BnW($hBmp, 1, $BW_val, True) CopyImage2Control($idPic_ImageEditor) _GDIPlus_GraphicsDispose($hCtx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE_BMP, 2) EndIf WinActivate($hGUI_ImageEditor_Child) Case $IE_Dummy_Pix $pix_go = True $hGUI_IE_PixelizeConf = GUICreate("Pixelize Settings", 194, 43, -1, -1, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE, $WS_EX_TOPMOST), $hGUI_ImageEditor) $idInput_IE_PC = GUICtrlCreateInput($IE_Pix_Size, 78, 10, 41, 21, BitOR($ES_CENTER, $ES_NUMBER)) $idLabel_Pixel = GUICtrlCreateLabel("Pixel Size", 16, 10, 62, 23) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") $idButton_IE_OK = GUICtrlCreateButton("OK", 144, 8, 43, 25) GUISetState(@SW_SHOW, $hGUI_IE_PixelizeConf) ControlFocus($hGUI_IE_PixelizeConf, "", $idButton_IE_OK) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Local $pix_go = False ExitLoop Case $idButton_IE_OK ExitLoop EndSwitch WEnd If $pix_go Then _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True ASM_Bitmap_Pixelize($hBmp, Min(GUICtrlRead($idInput_IE_PC), Min($bW, $bH))) CopyImage2Control($idPic_ImageEditor) GUIDelete($hGUI_IE_PixelizeConf) _GDIPlus_GraphicsDispose($hCtx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE_BMP, 2) Else GUIDelete($hGUI_IE_PixelizeConf) EndIf WinActivate($hGUI_ImageEditor_Child) Case $IE_Dummy_Ras $rast_go = True $iColor_Rasterize = 0x000000 $hGUI_ImageEditor_Raster = GUICreate("Rasterize Setting", 278, 100, -1, -1, BitOR($WS_SYSMENU, $WS_GROUP), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE, $WS_EX_TOPMOST), $hGUI_ImageEditor) $idLabel_IE_Raster = GUICtrlCreateLabel("Current Color", 6, 10, 86, 56, $SS_CENTER) GUICtrlSetFont(-1, 18, 400, 0, "Times New Roman") $idButton_IE_Color = GUICtrlCreateButton("Change", 176, 8, 80, 28) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") $idButton_IE_Color_Start = GUICtrlCreateButton("Start", 176, 40, 80, 28) GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") $idGraphic_Color = GUICtrlCreateGraphic(100, 8, 61, 61, $SS_ETCHEDFRAME) $idLabel_IE_Raster_Color = GUICtrlCreateLabel("", 104, 12, 52, 52) GUICtrlSetBkColor(-1, $iColor_Rasterize) GUISetState(@SW_SHOW, $hGUI_ImageEditor_Raster) ControlFocus($hGUI_ImageEditor_Raster, "", $idButton_IE_Color_Start) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE $rast_go = False ExitLoop Case $idButton_IE_Color, $idLabel_IE_Raster_Color $iColor_Rasterize = _ChooseColor(2, $iColor_Rasterize, 2) If Not @error Then GUICtrlSetBkColor(-1, $iColor_Rasterize) Case $idButton_IE_Color_Start ExitLoop EndSwitch WEnd GUIDelete($hGUI_ImageEditor_Raster) If $rast_go Then _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True ASM_Bitmap_Rasterize($hBmp, $iColor_Rasterize) CopyImage2Control($idPic_ImageEditor) _GDIPlus_GraphicsDispose($hCtx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE_BMP, 2) EndIf WinActivate($hGUI_ImageEditor_Child) Case $IE_Dummy_Res GUIRegisterMsg($WM_COMMAND, "") _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True $hGUI_IE_Resize = GUICreate("Resize Image", 306, 470, -1, -1, BitOR($WS_SYSMENU, $WS_GROUP), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE, $WS_EX_TOPMOST), $hGUI_ImageEditor) GUISetFont(8, 400, 0, "Arial") $idGroup_IE_ISize = GUICtrlCreateGroup(" Image Size ", 16, 8, 273, 97) $idLabel_IE_Current = GUICtrlCreateLabel("Current Size:", 32, 32, 94, 22) GUICtrlSetFont(-1, 12, 400, 0, "Arial") $idLabel_IE_New = GUICtrlCreateLabel("New Size:", 32, 64, 74, 22) GUICtrlSetFont(-1, 12, 400, 0, "Arial") $idLabel_IE_SizeC = GUICtrlCreateLabel($bW & " x " & $bH & " Pixel", 134, 32, 129, 22, $SS_RIGHT) GUICtrlSetFont(-1, 12, 400, 0, "Arial") $idLabel_IE_SizeN = GUICtrlCreateLabel($bW & " x " & $bH & " Pixel", 134, 64, 129, 22, $SS_RIGHT) GUICtrlSetFont(-1, 12, 400, 0, "Arial") GUICtrlCreateGroup("", -99, -99, 1, 1) $idGroup_IE_INSize = GUICtrlCreateGroup(" Set New Size ", 16, 120, 273, 185) $idLabel_IE_W1 = GUICtrlCreateLabel("Width:", 36, 146, 46, 21) GUICtrlSetFont(-1, 11, 400, 0, "Arial") $idInput_IE_W = GUICtrlCreateInput($bW, 80, 144, 49, 23, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) GUICtrlSetFont(-1, 9, 400, 0, "Arial") $idLabel_IE_x = GUICtrlCreateLabel("x", 144, 146, 11, 20) GUICtrlSetFont(-1, 10, 400, 0, "Arial") $idLabel_IE_H1 = GUICtrlCreateLabel(":Height", 221, 146, 49, 21) GUICtrlSetFont(-1, 11, 400, 0, "Arial") $idInput_IE_H = GUICtrlCreateInput($bH, 166, 144, 49, 23, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) GUICtrlSetFont(-1, 9, 400, 0, "Arial") $idLabel_IE_W2 = GUICtrlCreateLabel("Width:", 36, 183, 46, 21) GUICtrlSetFont(-1, 11, 400, 0, "Arial") $idInput_IE_WP = GUICtrlCreateInput("100", 80, 181, 35, 23, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) GUICtrlSetFont(-1, 9, 400, 0, "Arial") $idLabel_IE_P1 = GUICtrlCreateLabel("%", 116, 185, 15, 19) GUICtrlSetFont(-1, 9, 400, 0, "Arial") $idInput_IE_HP = GUICtrlCreateInput("100", 166, 181, 35, 23, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_NUMBER)) GUICtrlSetFont(-1, 9, 400, 0, "Arial") $idLabel_IE_P2 = GUICtrlCreateLabel("%", 202, 185, 15, 19) GUICtrlSetFont(-1, 9, 400, 0, "Arial") $idLabel_IE_H2 = GUICtrlCreateLabel(":Height", 221, 183, 49, 21) GUICtrlSetFont(-1, 11, 400, 0, "Arial") $idChkBox_IE_AR = GUICtrlCreateCheckbox("Preserve Aspect Ration", 80, 220) $idButton_IE_IHalf = GUICtrlCreateButton("Half", 36, 264, 75, 25) GUICtrlSetFont(-1, 10, 400, 0, "Arial") $idButton_IE_IDouble = GUICtrlCreateButton("Double", 193, 264, 75, 25) GUICtrlSetFont(-1, 10, 400, 0, "Arial") GUICtrlCreateGroup("", -99, -99, 1, 1) $idGroup_IE_IMethod = GUICtrlCreateGroup(" Resize Method ", 16, 320, 273, 73) $idCombo_IE = GUICtrlCreateCombo("", 32, 354, 241, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL)) GUICtrlSetData(-1, "0 - Default interpolation mode|1 - Low-quality mode|2 - High-quality mode|3 - Bilinear interpolation|4 - Bicubic interpolation|5 - Nearest-neighbor interpolation|6 - High-quality, bilinear interpolation|7 - High-quality, bicubic interpolation", "7 - High-quality, bicubic interpolation") GUICtrlCreateGroup("", -99, -99, 1, 1) $idButton_IE_OK = GUICtrlCreateButton("OK", 72, 408, 75, 25) GUICtrlSetFont(-1, 10, 400, 0, "Arial") $idButton_IE_Cancel = GUICtrlCreateButton("Cancel", 160, 408, 75, 25) GUICtrlSetFont(-1, 10, 400, 0, "Arial") GUISetState(@SW_SHOW, $hGUI_IE_Resize) ControlFocus($hGUI_IE_Resize, "", $idButton_IE_Cancel) GUIRegisterMsg($WM_COMMAND, "WM_COMMAND_IE") Local $w, $h, $maxw, $maxh, $minw, $minh While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idButton_IE_Cancel GUIDelete($hGUI_IE_Resize) Return 0 Case $idButton_IE_OK ExitLoop Case $idButton_IE_IHalf $maxw = Round(GUICtrlRead($idInput_IE_W) / 2, 0) $maxh = Round(GUICtrlRead($idInput_IE_H) / 2, 0) If $maxw > 1 Or $maxh > 1 Then GUICtrlSetData($idInput_IE_W, $maxw) GUICtrlSetData($idInput_IE_H, $maxh) GUICtrlSetData($idInput_IE_WP, Round(GUICtrlRead($idInput_IE_W) / $bW * 100)) GUICtrlSetData($idInput_IE_HP, Round(GUICtrlRead($idInput_IE_H) / $bH * 100)) GUICtrlSetData($idLabel_IE_SizeN, GUICtrlRead($idInput_IE_W) & " x " & GUICtrlRead($idInput_IE_H) & " Pixel") EndIf Case $idButton_IE_IDouble $minw = Round(GUICtrlRead($idInput_IE_W) * 2, 0) $minh = Round(GUICtrlRead($idInput_IE_H) * 2, 0) If $minw < 16384 Or $minh < 16384 Then GUICtrlSetData($idInput_IE_W, $minw) GUICtrlSetData($idInput_IE_H, $minh) GUICtrlSetData($idInput_IE_WP, Round(GUICtrlRead($idInput_IE_W) / $bW * 100)) GUICtrlSetData($idInput_IE_HP, Round(GUICtrlRead($idInput_IE_H) / $bH * 100)) GUICtrlSetData($idLabel_IE_SizeN, GUICtrlRead($idInput_IE_W) & " x " & GUICtrlRead($idInput_IE_H) & " Pixel") EndIf EndSwitch WEnd $bW = GUICtrlRead($idInput_IE_W) $bH = GUICtrlRead($idInput_IE_H) Local $hBmp_New = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $bW, "int", $bH, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) $hBmp_New = $hBmp_New[6] Local $hCtx_IE_New = _GDIPlus_ImageGetGraphicsContext($hBmp_New) DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hCtx_IE_New, "int", _SendMessage(GUICtrlGetHandle($idCombo_IE), $CB_GETCURSEL)) _GDIPlus_GraphicsDrawImageRect($hCtx_IE_New, $hBmp, 0, 0, $bW, $bH) _GDIPlus_BitmapDispose($hBmp) _GDIPlus_GraphicsDispose($hCtx_IE_New) GUIDelete($hGUI_IE_Resize) $hBmp = $hBmp_New $bW = _GDIPlus_ImageGetWidth($hBmp) $bH = _GDIPlus_ImageGetHeight($hBmp) If $bW < $hGUI_ImageEditor_W Or $bH < ($hGUI_ImageEditor_H - $height_delta) Then $IE_offset_x = -($hGUI_ImageEditor_W - $bW) / 2 $IE_offset_y = -(($hGUI_ImageEditor_H - $height_delta) - $bH) / 2 GUICtrlSetPos($idPic_ImageEditor, $IE_offset_x * - 1, ($hGUI_ImageEditor_H - $bH) / 2 - $height_delta / 2, $bW, $bH) Else GUICtrlSetPos($idPic_ImageEditor, 0, 0, $bW, $bH) EndIf $iMetricsSumX = ($bH > ($hGUI_ImageEditor_H - $height_delta)) * $iVSscroll + $iXFixedFrame * 2 $iMetricsSumY = ($bW > $hGUI_ImageEditor_W) * $iHSscroll + $iYCaption + $iYFixedFrame _Functions_RemoveScrollBars($hGUI_ImageEditor_Child) $IE_ScrollbarH = False $IE_ScrollbarV = False If $bW > $hGUI_ImageEditor_W Or $bH > ($hGUI_ImageEditor_H - $height_delta) Then _GUIScrollBars_Init($hGUI_ImageEditor_Child) _GUIScrollBars_SetScrollInfoMin($hGUI_ImageEditor_Child, $SB_HORZ, 0) _GUIScrollBars_SetScrollInfoMax($hGUI_ImageEditor_Child, $SB_HORZ, $bW - $hGUI_ImageEditor_W + 61 + $iMetricsSumX) _GUIScrollBars_SetScrollInfoMin($hGUI_ImageEditor_Child, $SB_VERT, 0) _GUIScrollBars_SetScrollInfoMax($hGUI_ImageEditor_Child, $SB_VERT, $bH - $hGUI_ImageEditor_H + $iMetricsSumY + $height_delta - 1) GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL_IE") GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL_IE") GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL_IE") If $bW > $hGUI_ImageEditor_W Then WM_HSCROLL_IE($hGUI_ImageEditor_Child, 0, $SB_THUMBTRACK, 0) $IE_ScrollbarH = True EndIf If $bH > ($hGUI_ImageEditor_H - $height_delta) Then WM_VSCROLL_IE($hGUI_ImageEditor_Child, 0, $SB_THUMBTRACK, 0) $IE_ScrollbarV = True EndIf Else GUIRegisterMsg($WM_HSCROLL, "") GUIRegisterMsg($WM_VSCROLL, "") GUIRegisterMsg($WM_MOUSEWHEEL, "") EndIf _GDIPlus_GraphicsDispose($hGfx_IE) _GDIPlus_GraphicsDispose($hCtx_IE) _GDIPlus_ImageDispose($hCtx_IE_BMP) _GDIPlus_BitmapDispose($hGfx_IE_BMP) _WinAPI_DeleteObject(GUICtrlSendMsg($idPic_ImageEditor, $STM_SETIMAGE, $IMAGE_BITMAP, 0)) CopyImage2Control($idPic_ImageEditor) $hGfx_IE = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($idPic_ImageEditor)) $hGfx_IE_BMP = _GDIPlus_BitmapCreateFromGraphics($bW, $bH, $hGfx_IE) $hCtx_IE = _GDIPlus_ImageGetGraphicsContext($hGfx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE_BMP, 2) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE, 2) _GDIPlus_GraphicsSetSmoothingMode($hGfx_IE, 2) WinSetTitle($hGUI_ImageEditor, "", "AutoIt Windows Screenshooter Basic Image Editor / Image Info: " & $bW & "x" & $bH & " pixel") WinActivate($hGUI_ImageEditor_Child) EndSwitch EndIf Until False If @OSBuild < 6000 Then DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", $hToolbar_IE, "ptr", 0, "ptr", 0) _WinAPI_DeleteObject($hHBITMAP_IE_Icons) _WinAPI_DestroyIcon($hIcon_New) _GDIPlus_BrushDispose($hBrush_IE) _GDIPlus_PenDispose($hPen_IE) _GDIPlus_PenDispose($hPenArrow_IE) _GDIPlus_PenDispose($hHL_IE) _GDIPlus_ArrowCapDispose($hEndCap) _GDIPlus_BitmapDispose($IE_Bmp_Undo) _GDIPlus_BitmapDispose($hWnd_Title_Icon) _GDIPlus_BitmapDispose($hGfx_IE_BMP) _GDIPlus_GraphicsDispose($hCtx_IE_BMP) _GDIPlus_GraphicsDispose($hCtx_IE) _GDIPlus_GraphicsDispose($hGfx_IE) GUIRegisterMsg($WM_SETCURSOR, "") GUIRegisterMsg($WM_MOUSEWHEEL, "") GUIRegisterMsg($WM_HSCROLL, "") GUIRegisterMsg($WM_VSCROLL, "") GUIRegisterMsg($WM_COMMAND, "") GUIRegisterMsg($WM_NOTIFY, "") GUIDelete($hGUI_ImageEditor_Child) GUIDelete($hGUI_ImageEditor) EndFunc ;==>ImageEditor Func Array_Shorten(ByRef $aArray, $iDiv) Local $iNew = Round(UBound($aArray) / $iDiv, 0) Local $aTmp[$iNew][2], $i, $j = 1 $aTmp[0][0] = $iNew - 1 For $i = 1 To $aTmp[0][0] $aTmp[$i][0] = $aArray[$j][0] $aTmp[$i][1] = $aArray[$j][1] $j += $iDiv Next $aArray = $aTmp EndFunc Func _Functions_RemoveScrollBars($hWnd, $horz = True, $vert = True) Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO) DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE)) DllStructSetData($tSCROLLINFO, "nMin", 0) DllStructSetData($tSCROLLINFO, "nMax", 0) DllStructSetData($tSCROLLINFO, "nPage", 0) If $horz Then _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO) If $vert Then _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO) EndFunc ;==>_Functions_RemoveScrollBars Func CopyImage2Control($idControl) Local Const $hHBitmap_ImageEditor = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp) Local Const $hB = GUICtrlSendMsg($idPic_ImageEditor, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap_ImageEditor) If $hB Then _WinAPI_DeleteObject($hB) _WinAPI_DeleteObject($hHBitmap_ImageEditor) EndFunc ;==>CopyImage2Control Func _GDIPlus_GraphicsDrawString2($hGraphics, $sString, $sFont = "Arial", $nSize = 24, $iFormat = 0, $iColor = 0xFFFF0000, $nX = 0, $nY = 0) Local $hBrush = _GDIPlus_BrushCreateSolid($iColor) Local $hFormat = _GDIPlus_StringFormatCreate($iFormat) Local $hFamily = _GDIPlus_FontFamilyCreate($sFont) Local $hFont = _GDIPlus_FontCreate($hFamily, $nSize) Local $tLayout = _GDIPlus_RectFCreate($nX, $nY, 0, 0) Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat) Local $aResult = _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $aInfo[0], $hFormat, $hBrush) Local $iError = @error _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) Return SetError($iError, 0, $aResult) EndFunc ;==>_GDIPlus_GraphicsDrawString2 Func GetStringSize($string, $font, $fontsize, $fontstyle) Local $iWidth = StringLen($string) * $fontsize Local $iHeight = 2 * $fontsize Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) Local $hBitmap = $aResult[6] Local $hGrphContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) Local $hFormat = _GDIPlus_StringFormatCreate() Local $hFamily = _GDIPlus_FontFamilyCreate($font) Local $hFont = _GDIPlus_FontCreate($hFamily, $fontsize, $fontstyle) Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0) Local $aInfo = _GDIPlus_GraphicsMeasureString($hGrphContext, $string, $hFont, $tLayout, $hFormat) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_GraphicsDispose($hGrphContext) Local $aDim[2] = [Int(DllStructGetData($aInfo[0], "Width")), Int(DllStructGetData($aInfo[0], "Height"))] Return $aDim EndFunc ;==>GetStringSize #endregion Image Editor Func Save_Bitmap() Local $m, $save, $hBmp_tmp, $ok = True Local $filename = FileSaveDialog("Save Image", @ScriptDir, "Images (*.jpg;*.png;*.bmp;*.gif;*.tif)", 18, "", $hGUI_ImageEditor) If Not @error Then If StringMid($filename, StringLen($filename) - 3, 1) <> "." Then $filename &= ".png" If FileExists($filename) Then $m = MsgBox(4 + 48, "Confirm save", $filename & " already exists." & @CRLF & "Do you want t replace it?") If $m = 7 Then $ok = False EndIf EndIf If $ok Then Switch StringRight($filename, 4) Case ".jpg" Local $sCLSID = _GDIPlus_EncodersGetCLSID("JPG") Local $tParams = _GDIPlus_ParamInit(1) Local $tData = DllStructCreate("int Quality") DllStructSetData($tData, "Quality", 90) Local $pData = DllStructGetPtr($tData) _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData) Local $pParams = DllStructGetPtr($tParams) $save = _GDIPlus_ImageSaveToFileEx($hBmp, $filename, $sCLSID, $pParams) $tData = "" $tParams = "" Case Else $save = _GDIPlus_ImageSaveToFile($hBmp, $filename) EndSwitch EndIf If $save Then Local $c = MsgBox(4 + 64 + 256, "Information", "Image saved properly to: " & @CRLF & @CRLF & $filename & @CRLF & @CRLF & @CRLF & _ "Display saved image with default app?", 20, $hGUI_ImageEditor) If $c = 6 Then ShellExecute($filename) Else MsgBox(16, "ERROR", "Image could not be saved!", 20) EndIf EndIf EndFunc ;==>Save_Bitmap Func WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam, $lParam Switch $hWnd Case $hGUI_ImageEditor_Child Local $aMPos_IE = GUIGetCursorInfo($hGUI_ImageEditor_Child) If (Not @error) And ($aMPos_IE[4] = $idPic_ImageEditor) Then _WinAPI_SetCursor($hCursor_IE) Return 1 EndIf EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_SETCURSOR Func WM_NOTIFY_IE($hWnd, $MsgID, $wParam, $lParam) #forceref $hWnd, $MsgID, $wParam Local $tNMHDR, $event, $hwndFrom, $code, $i_idNew, $dwFlags, $lResult, $idFrom, $i_idOld Local $tNMTOOLBAR, $tNMTBHOTITEM, $hSubmenu, $aRet, $iMenuID $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hwndFrom = DllStructGetData($tNMHDR, "hWndFrom") $idFrom = DllStructGetData($tNMHDR, "IDFrom") $code = DllStructGetData($tNMHDR, "Code") Switch $hwndFrom Case $hToolbar_IE Switch $code Case $NM_LDOWN Switch _GUICtrlToolbar_IsButtonEnabled($hToolbar_IE, $IE_iItem) Case True GUICtrlSendToDummy($TB_Button_Chk, $IE_iItem) EndSwitch Case $TBN_HOTITEMCHANGE $tNMTBHOTITEM = DllStructCreate($tagNMTBHOTITEM, $lParam) $i_idOld = DllStructGetData($tNMTBHOTITEM, "idOld") $i_idNew = DllStructGetData($tNMTBHOTITEM, "idNew") $IE_iItem = $i_idNew $dwFlags = DllStructGetData($tNMTBHOTITEM, "dwFlags") Case $TBN_DROPDOWN Switch $IE_iItem Case $idIEPen_Size _GUICtrlMenu_TrackPopupMenu($hMenu_IE_PS, $hGUI_ImageEditor) ;~ _GUICtrlMenu_DestroyMenu($hMenu_IE_PS) Return 0 Case $idFX_IE _GUICtrlMenu_TrackPopupMenu($hMenu_IE_FX, $hGUI_ImageEditor) ;~ _GUICtrlMenu_DestroyMenu($hMenu_IE_FX) Return 0 EndSwitch EndSwitch EndSwitch Return "GUI_RUNDEFMSG" EndFunc ;==>WM_NOTIFY_IE Func WM_COMMAND_IE($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $ilParam Local $nMsg_IE, $ii Switch BitAND($iwParam, 0x0000FFFF) Case $idInput_IE_W $ii = GUICtrlRead($idInput_IE_W) Switch BitAND(GUICtrlRead($idChkBox_IE_AR), $GUI_CHECKED) Case 0 GUICtrlSetData($idInput_IE_W, Max(1, Min($ii, 16384))) Case 1 GUICtrlSetData($idInput_IE_W, Max(1, Min($ii, 16384))) $ii = Round(GUICtrlRead($idInput_IE_W) * $bH / $bW, 0) GUICtrlSetData($idInput_IE_H, $ii) EndSwitch GUICtrlSetData($idInput_IE_WP, Round(GUICtrlRead($idInput_IE_W) / $bW * 100)) GUICtrlSetData($idInput_IE_HP, Round(GUICtrlRead($idInput_IE_H) / $bH * 100)) GUICtrlSetData($idLabel_IE_SizeN, GUICtrlRead($idInput_IE_W) & " x " & GUICtrlRead($idInput_IE_H) & " Pixel") Case $idInput_IE_H $ii = GUICtrlRead($idInput_IE_H) Switch BitAND(GUICtrlRead($idChkBox_IE_AR), $GUI_CHECKED) Case 0 GUICtrlSetData($idInput_IE_H, Max(1, Min($ii, 16384))) Case 1 GUICtrlSetData($idInput_IE_H, Max(1, Min($ii, 16384))) $ii = Round(GUICtrlRead($idInput_IE_H) * $bW / $bH, 0) GUICtrlSetData($idInput_IE_W, $ii) EndSwitch GUICtrlSetData($idInput_IE_WP, Round(GUICtrlRead($idInput_IE_W) / $bW * 100)) GUICtrlSetData($idInput_IE_HP, Round(GUICtrlRead($idInput_IE_H) / $bH * 100)) GUICtrlSetData($idLabel_IE_SizeN, GUICtrlRead($idInput_IE_W) & " x " & GUICtrlRead($idInput_IE_H) & " Pixel") Case $idInput_IE_WP $ii = Round(GUICtrlRead($idInput_IE_WP) / 100 * $bW, 0) Switch BitAND(GUICtrlRead($idChkBox_IE_AR), $GUI_CHECKED) Case 0 GUICtrlSetData($idInput_IE_W, Max(1, Min($ii, 16384))) Case 1 GUICtrlSetData($idInput_IE_W, Max(1, Min($ii, 16384))) $ii = Round(GUICtrlRead($idInput_IE_W) * $bH / $bW, 0) GUICtrlSetData($idInput_IE_H, $ii) EndSwitch GUICtrlSetData($idInput_IE_HP, Round(GUICtrlRead($idInput_IE_H) / $bH * 100)) GUICtrlSetData($idLabel_IE_SizeN, GUICtrlRead($idInput_IE_W) & " x " & GUICtrlRead($idInput_IE_H) & " Pixel") Case $idInput_IE_HP $ii = Round(GUICtrlRead($idInput_IE_HP) / 100 * $bH, 0) Switch BitAND(GUICtrlRead($idChkBox_IE_AR), $GUI_CHECKED) Case 0 GUICtrlSetData($idInput_IE_H, Max(1, Min($ii, 16384))) Case 1 GUICtrlSetData($idInput_IE_H, Max(1, Min($ii, 16384))) $ii = Round(GUICtrlRead($idInput_IE_H) * $bW / $bH, 0) GUICtrlSetData($idInput_IE_W, $ii) EndSwitch GUICtrlSetData($idInput_IE_WP, Round(GUICtrlRead($idInput_IE_W) / $bW * 100)) GUICtrlSetData($idLabel_IE_SizeN, GUICtrlRead($idInput_IE_W) & " x " & GUICtrlRead($idInput_IE_H) & " Pixel") EndSwitch Switch $iwParam Case $idFX_IE_GS Local $GS_val = 128, $aCI, $gs_go = True ;~ $hGUI_ImageEditor_GS = GUICreate("Greyscale Setting", 332, 118, -1, -1, BitOR($WS_SYSMENU, $WS_GROUP), BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE, $WS_EX_TOPMOST), $hGUI_ImageEditor) ;~ $hSlider_IE_GS = _GUICtrlSlider_Create($hGUI_ImageEditor_GS, 10, 40, 310, 45, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_BOTH, $TBS_ENABLESELRANGE, $WS_TABSTOP)) ;~ _GUICtrlSlider_SetRangeMin($hSlider_IE_GS, 1) ;~ _GUICtrlSlider_SetRangeMax($hSlider_IE_GS, 255) ;~ _GUICtrlSlider_SetPos($hSlider_IE_GS, $GS_val) ;~ Local Const $idLabel_IE_GS = GUICtrlCreateLabel("Greyscale Treshold", 20, 2, 83, 33) ;~ GUICtrlSetFont(-1, 11, 400, 0, "Times New Roman") ;~ $idInput_IE_GS = GUICtrlCreateInput($GS_val, 112, 8, 95, 27, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY)) ;~ GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") ;~ Local Const $idButton_IE_GS = GUICtrlCreateButton("Start", 224, 8, 80, 27) ;~ GUICtrlSetFont(-1, 12, 400, 0, "Times New Roman") ;~ GUISetState(@SW_SHOW, $hGUI_ImageEditor_GS) ;~ While 1 ;~ $nMsg_IE = GUIGetMsg() ;~ Switch $nMsg_IE ;~ Case $GUI_EVENT_CLOSE ;~ GUIDelete($hGUI_ImageEditor_GS) ;~ $gs_go = False ;~ ExitLoop ;~ Case $idButton_IE_GS ;~ $GS_val = _GUICtrlSlider_GetPos($hSlider_IE_GS) ;~ GUIDelete($hGUI_ImageEditor_GS) ;~ ExitLoop ;~ EndSwitch ;~ $aCI = GUIGetCursorInfo($hGUI_ImageEditor_GS) ;~ If $aCI [2] Then GUICtrlSetData($idInput_IE_GS, $IE_tmp) ;~ WEnd If $gs_go Then _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True ASM_Bitmap_Grey_BnW($hBmp, 0, $GS_val, True) CopyImage2Control($idPic_ImageEditor) WinActivate($hGUI_ImageEditor_Child) _GDIPlus_GraphicsDispose($hCtx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE_BMP, 2) EndIf Return 1 Case $idFX_IE_BW GUICtrlSendToDummy($IE_Dummy_BW) Case $idFX_IE_INV _GDIPlus_BitmapDispose($IE_Bmp_Undo) $IE_Bmp_Undo = _GDIPlus_BitmapCloneArea($hBmp, 0, 0, $bW, $bH) If Not $IE_Bmp_Undo Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone ie undo bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) $Undo_IE = True ASM_Bitmap_Invert($hBmp, True) CopyImage2Control($idPic_ImageEditor) WinActivate($hGUI_ImageEditor_Child) _GDIPlus_GraphicsDispose($hCtx_IE_BMP) $hCtx_IE_BMP = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetSmoothingMode($hCtx_IE_BMP, 2) Return 1 Case $idFX_IE_BLUR GUICtrlSendToDummy($IE_Dummy_Blur) Return 1 Case $idFX_IE_Pix GUICtrlSendToDummy($IE_Dummy_Pix) Return 1 Case $idFX_IE_Rast GUICtrlSendToDummy($IE_Dummy_Ras) Return 1 Case $idFX_IE_Resize GUICtrlSendToDummy($IE_Dummy_Res) Return 1 Case $idIEPen_Size_1px _GUICtrlMenu_CheckRadioItem($hMenu_IE_PS, 0, 5, 0) _GDIPlus_PenSetWidth($hPen_IE, 1) _GDIPlus_PenSetWidth($hPenArrow_IE, 1) $IE_PenSize = 1 Case $idIEPen_Size_2px _GUICtrlMenu_CheckRadioItem($hMenu_IE_PS, 0, 5, 1) _GDIPlus_PenSetWidth($hPen_IE, 2) _GDIPlus_PenSetWidth($hPenArrow_IE, 2) $IE_PenSize = 2 Case $idIEPen_Size_4px _GUICtrlMenu_CheckRadioItem($hMenu_IE_PS, 0, 5, 2) _GDIPlus_PenSetWidth($hPen_IE, 4) _GDIPlus_PenSetWidth($hPenArrow_IE, 4) $IE_PenSize = 4 Case $idIEPen_Size_8px _GUICtrlMenu_CheckRadioItem($hMenu_IE_PS, 0, 5, 3) _GDIPlus_PenSetWidth($hPen_IE, 8) _GDIPlus_PenSetWidth($hPenArrow_IE, 8) $IE_PenSize = 8 Case $idIEPen_Size_16px _GUICtrlMenu_CheckRadioItem($hMenu_IE_PS, 0, 5, 4) _GDIPlus_PenSetWidth($hPen_IE, 16) _GDIPlus_PenSetWidth($hPenArrow_IE, 16) $IE_PenSize = 16 EndSwitch If _GUICtrlToolbar_IsButtonChecked($hToolbar_IE, $idPen_IE) Or _GUICtrlToolbar_IsButtonChecked($hToolbar_IE, $idRectangle_IE) Or _GUICtrlToolbar_IsButtonChecked($hToolbar_IE, $idEllipse_IE) Or _GUICtrlToolbar_IsButtonChecked($hToolbar_IE, $idArrow_IE) Then _WinAPI_DestroyCursor($hCursor_IE) $hCursor_IE = _WinAPI_CreateSolidCursorFromBitmap($IE_PenSize, $IE_PenSize, BitOR(BitShift(BitAND($IE_Pen_Col, 0x000000FF), -16), BitAND($IE_Pen_Col, 0x0000FF00), BitShift(BitAND($IE_Pen_Col, 0x00FF0000), 16))) Local $aCI = GUIGetCursorInfo($hGUI_ImageEditor_Child) If (Not @error) And $aCI[4] = $idPic_ImageEditor Then _WinAPI_SetCursor($hCursor_IE) EndIf _GUICtrlToolbar_CheckButton($hToolbar_IE, $idIEPen_Size, False) Return "GUI_RUNDEFMSG" EndFunc ;==>WM_COMMAND_IE Func WM_HSCROLL_IE($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $lParam Local $Min, $Max, $Page, $TrackPos ; Get all the horizontal scroll bar information Local $tSCROLLINFO_X = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ) $Min = DllStructGetData($tSCROLLINFO_X, "nMin") $Max = DllStructGetData($tSCROLLINFO_X, "nMax") $Page = DllStructGetData($tSCROLLINFO_X, "nPage") ; Save the position for comparison later on $IE_offset_x = DllStructGetData($tSCROLLINFO_X, "nPos") $TrackPos = DllStructGetData($tSCROLLINFO_X, "nTrackPos") #forceref $Min, $Max Local $nScrollCode = BitAND($wParam, 0x0000FFFF) Switch $nScrollCode Case $SB_LINELEFT ; user clicked left arrow DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x - 1) Case $SB_LINERIGHT ; user clicked right arrow DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x + 1) Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x - $Page) Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box DllStructSetData($tSCROLLINFO_X, "nPos", $IE_offset_x + $Page) Case $SB_THUMBTRACK ; user dragged the scroll box DllStructSetData($tSCROLLINFO_X, "nPos", $TrackPos) EndSwitch ;~ // Set the position and then retrieve it. Due to adjustments ;~ // by Windows it may not be the same as the value set. DllStructSetData($tSCROLLINFO_X, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO_X) $IE_offset_x = DllStructGetData($tSCROLLINFO_X, "nPos") ControlMove("", "", $idPic_ImageEditor, -$IE_offset_x, -$IE_offset_y) Return "GUI_RUNDEFMSG" EndFunc ;==>WM_HSCROLL_IE Func WM_VSCROLL_IE($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $lParam Local $Min, $Max, $Page, $TrackPos ;~ ; Get all the horizontal scroll bar information Local $tSCROLLINFO_Y = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT) $Min = DllStructGetData($tSCROLLINFO_Y, "nMin") $Max = DllStructGetData($tSCROLLINFO_Y, "nMax") $Page = DllStructGetData($tSCROLLINFO_Y, "nPage") ; Save the position for comparison later on $IE_offset_y = DllStructGetData($tSCROLLINFO_Y, "nPos") $TrackPos = DllStructGetData($tSCROLLINFO_Y, "nTrackPos") #forceref $Min, $Max Local $nScrollCode = BitAND($wParam, 0x0000FFFF) Switch $nScrollCode Case $SB_LINELEFT ; user clicked left arrow DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y - 1) Case $SB_LINERIGHT ; user clicked right arrow DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y + 1) Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y - $Page) Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box DllStructSetData($tSCROLLINFO_Y, "nPos", $IE_offset_y + $Page) Case $SB_THUMBTRACK ; user dragged the scroll box DllStructSetData($tSCROLLINFO_Y, "nPos", $TrackPos) EndSwitch ;~ // Set the position and then retrieve it. Due to adjustments ;~ // by Windows it may not be the same as the value set. DllStructSetData($tSCROLLINFO_Y, "fMask", $SIF_POS) _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO_Y) $IE_offset_y = DllStructGetData($tSCROLLINFO_Y, "nPos") ControlMove("", "", $idPic_ImageEditor, -$IE_offset_x, -$IE_offset_y) Return "GUI_RUNDEFMSG" EndFunc ;==>WM_VSCROLL_IE Func WM_MOUSEWHEEL_IE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $lParam If $hWnd = $hGUI_ImageEditor_Child Then Local $wheel_Dir = _WinAPI_HiWord($wParam), $y, $steps_y = 8 If _IsPressed("10", $hDll) Or _IsPressed("02", $hDll) Then If $wheel_Dir > 0 And $IE_ScrollbarH Then For $y = 1 To $steps_y _SendMessage($hGUI_ImageEditor_Child, $WM_HSCROLL, $SB_LINEUP) Next Else If $IE_ScrollbarH Then For $y = 1 To $steps_y _SendMessage($hGUI_ImageEditor_Child, $WM_HSCROLL, $SB_LINEDOWN) Next EndIf EndIf Else If $wheel_Dir > 0 And $IE_ScrollbarV Then For $y = 1 To $steps_y _SendMessage($hGUI_ImageEditor_Child, $WM_VSCROLL, $SB_LINEUP) Next Else If $IE_ScrollbarV Then For $y = 1 To $steps_y _SendMessage($hGUI_ImageEditor_Child, $WM_VSCROLL, $SB_LINEDOWN) Next EndIf EndIf EndIf EndIf Return "GUI_RUNDEFMSG" EndFunc ;==>WM_MOUSEWHEEL_IE Func Min($a, $b) If $a < $b Then Return $a Return $b EndFunc ;==>Min Func Max($a, $b) If $a > $b Then Return $a Return $b EndFunc ;==>Max Func _CreateNewBmp32($iWidth, $iHeight, ByRef $ptr, ByRef $hBild) ;erstellt leere 32-bit-Bitmap; Rückgabe $HDC und $ptr und handle auf die Bitmapdaten Local Const $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen Local Const $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette DllStructSetData($tBMI, "Width", $iWidth) DllStructSetData($tBMI, "Height", -$iHeight) ;minus =standard = bottomup DllStructSetData($tBMI, "Planes", 1) DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR Local Const $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0) $hBild = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet _WinAPI_SelectObject($hcdc, $hBild) ;objekt hbitmap in DC Return $hcdc ;DC der Bitmap zurückgeben EndFunc ;==>_CreateNewBmp32 Func _GDIPlus_GraphicsDrawCurve2($hGraphics, $aPoints, $nTension, $hPen = 0) Local $iI, $iCount, $iTmpErr, $iTmpExt, $pPoints, $tPoints, $aResult __GDIPlus_PenDefCreate($hPen) $iCount = $aPoints[0][0] $tPoints = DllStructCreate("float[" & $iCount * 2 & "]") $pPoints = DllStructGetPtr($tPoints) For $iI = 1 To $iCount DllStructSetData($tPoints, 1, $aPoints[$iI][0], (($iI - 1) * 2) + 1) DllStructSetData($tPoints, 1, $aPoints[$iI][1], (($iI - 1) * 2) + 2) Next $aResult = DllCall($ghGDIPDll, "uint", "GdipDrawCurve2", "handle", $hGraphics, "hwnd", $hPen, "ptr", $pPoints, "int", $iCount, "float", $nTension) $iTmpErr = @error $iTmpExt = @extended __GDIPlus_PenDefDispose() If $iTmpErr Then Return SetError($iTmpErr, $iTmpExt, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsDrawCurve2 #region functions from WinAPIEx.au3 Func _WinAPI_CreateSolidCursorFromBitmap($iW, $iH, $iColor) ;iColor in BGR format Local $hDC = _WinAPI_GetWindowDC(0) Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC) Local $hXOR = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local $hSv = _WinAPI_SelectObject($hMemDC, $hXOR) Local $hBrush = _WinAPI_CreateSolidBrush($iColor) _WinAPI_SelectObject($hMemDC, $hBrush) Local $tRect = DllStructCreate($tagRECT) DllStructSetData($tRect, "Left", 0) DllStructSetData($tRect, "Top", 0) DllStructSetData($tRect, "Right", $iW) DllStructSetData($tRect, "Bottom", $iH) _WinAPI_FillRect($hMemDC, DllStructGetPtr($tRect), $hBrush) _WinAPI_ReleaseDC(0, $hDC) _WinAPI_SelectObject($hMemDC, $hSv) _WinAPI_DeleteDC($hMemDC) _WinAPI_DeleteObject($hBrush) $hDC = _WinAPI_GetWindowDC(0) $hMemDC = _WinAPI_CreateCompatibleDC($hDC) Local Const $hAND = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) $hSv = _WinAPI_SelectObject($hMemDC, $hAND) $hBrush = _WinAPI_CreateSolidBrush(0x0) _WinAPI_SelectObject($hMemDC, $hBrush) _WinAPI_FillRect($hMemDC, DllStructGetPtr($tRect), $hBrush) _WinAPI_ReleaseDC(0, $hDC) _WinAPI_SelectObject($hMemDC, $hSv) _WinAPI_DeleteDC($hMemDC) _WinAPI_DeleteObject($hBrush) Local Const $hCursor = _WinAPI_CreateIconIndirect($hXOR, $hAND, 0, 0, 0) _WinAPI_DeleteObject($hXOR) _WinAPI_DeleteObject($hAND) Return $hCursor EndFunc ;==>_WinAPI_CreateSolidCursorFromBitmap Func _WinAPI_CopyImage($hImage, $iType = 0, $xDesired = 0, $yDesired = 0, $iFlags = 0); from _WinAPIEx by Yashied Local $ret = DllCall('user32.dll', 'ptr', 'CopyImage', 'ptr', $hImage, 'int', $iType, 'int', $xDesired, 'int', $yDesired, 'int', $iFlags) If (@error) Or (Not $ret[0]) Then Return SetError(1, 0, 0) Return $ret[0] EndFunc ;==>_WinAPI_CopyImage Func _WinAPI_LoadCursor($hInstance, $sName) Local $TypeOfName = 'int' If IsString($sName) Then $TypeOfName = 'wstr' Local $ret = DllCall('user32.dll', 'ptr', 'LoadCursorW', 'ptr', $hInstance, $TypeOfName, $sName) If (@error) Or (Not $ret[0]) Then Return SetError(1, 0, 0) Return $ret[0] EndFunc ;==>_WinAPI_LoadCursor Func _WinAPI_SetSystemCursor($hCursor, $ID, $fCopy = 0) If $fCopy Then $hCursor = _WinAPI_CopyIcon($hCursor) Local $ret = DllCall('user32.dll', 'int', 'SetSystemCursor', 'ptr', $hCursor, 'dword', $ID) If (@error) Or (Not $ret[0]) Then Return SetError(1, 0, 0) Return 1 EndFunc ;==>_WinAPI_SetSystemCursor Func _WinAPI_CreateIconIndirect($hBitmap, $hMask, $XHotspot = 0, $YHotspot = 0, $fIcon = 1) Local $tICONINFO = DllStructCreate($tagICONINFO) DllStructSetData($tICONINFO, 1, $fIcon) DllStructSetData($tICONINFO, 2, $XHotspot) DllStructSetData($tICONINFO, 3, $YHotspot) DllStructSetData($tICONINFO, 4, $hMask) DllStructSetData($tICONINFO, 5, $hBitmap) Local $ret = DllCall('user32.dll', 'ptr', 'CreateIconIndirect', 'ptr', DllStructGetPtr($tICONINFO)) If (@error) Or (Not $ret[0]) Then Return SetError(1, 0, 0) Return $ret[0] EndFunc ;==>_WinAPI_CreateIconIndirect Func _WinAPI_DestroyCursor($hCursor) Local $ret = DllCall('user32.dll', 'int', 'DestroyCursor', 'ptr', $hCursor) If (@error) Or (Not $ret[0]) Then Return SetError(1, 0, 0) Return 1 EndFunc ;==>_WinAPI_DestroyCursor Func _WinAPI_SetWindowTitleIcon($sFile, $hWnd, $iW = 32, $iH = 32) If $sFile = "" Then Return SetError(1, 0, 0) If Not IsHWnd($hWnd) Then Return SetError(2, 0, 0) Local Const $GCL_HICON = -14, $GCL_HICONSM = -34 Local $hImage If Not FileExists($sFile) Then If _GDIPlus_ImageGetType($sFile) = -1 Then Return SetError(3, @error, 0) $hImage = $sFile ;interpret $sFile as a bitmap handle Else $hImage = _GDIPlus_ImageLoadFromFile($sFile) If @error Then Return SetError(4, @error, 0) EndIf Local $aRes = DllCall($ghGDIPDll, "uint", "GdipGetImageThumbnail", "handle", $hImage, "uint", $iW, "uint", $iH, "int*", 0, "ptr", 0, "ptr", 0) If @error Then Return SetError(5, @error, 0) Local $hImageScaled = $aRes[4] $aRes = DllCall($ghGDIPDll, "uint", "GdipCreateHICONFromBitmap", "handle", $hImageScaled, "int*", 0) If @error Then Return SetError(6, @error, 0) Local $hIconNew = $aRes[2] Local Const $hIcon = _WinAPI_GetClassLongEx($hWnd, $GCL_HICON) If @error Then Return SetError(7, @error, 0) _WinAPI_DestroyIcon($hIcon) _WinAPI_SetClassLongEx($hWnd, $GCL_HICON, $hIconNew) If @error Then Return SetError(8, @error, 0) _WinAPI_SetClassLongEx($hWnd, $GCL_HICONSM, $hIconNew) If @error Then Return SetError(9, @error, 0) _GDIPlus_ImageDispose($hImage) _GDIPlus_ImageDispose($hImageScaled) Return $hIconNew EndFunc ;==>_WinAPI_SetWindowTitleIcon Func _WinAPI_GetClassLongEx($hWnd, $iIndex) Local $ret If @AutoItX64 Then $ret = DllCall('user32.dll', 'ulong_ptr', 'GetClassLongPtrW', 'hwnd', $hWnd, 'int', $iIndex) Else $ret = DllCall('user32.dll', 'ulong', 'GetClassLongW', 'hwnd', $hWnd, 'int', $iIndex) EndIf If (@error) Or (Not $ret[0]) Then Return SetError(1, 0, 0) Return $ret[0] EndFunc ;==>_WinAPI_GetClassLongEx Func _WinAPI_SetClassLongEx($hWnd, $iIndex, $iNewLong) Local $ret If @AutoItX64 Then $ret = DllCall('user32.dll', 'ulong_ptr', 'SetClassLongPtrW', 'hwnd', $hWnd, 'int', $iIndex, 'long_ptr', $iNewLong) Else $ret = DllCall('user32.dll', 'ulong', 'SetClassLongW', 'hwnd', $hWnd, 'int', $iIndex, 'long', $iNewLong) EndIf If (@error) Or (Not $ret[0]) Then Return SetError(1, 0, 0) Return $ret[0] EndFunc ;==>_WinAPI_SetClassLongEx #endregion functions from WinAPIEx.au3 Func _ImageEditor_ToolbarIcons() Local $ImageEditor_Icons $ImageEditor_Icons &= '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' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= 'j8YS/IbNOzaYFn3jsssuMotzM7BpdwOenv1CL5Crq63dXVJZbUoCk4qLCgEARVkAzzHIpgNxGdB1HZIoglIXJIcbDslGZigTKVlGSXHhNQPy4HzhxV0QBLFeV+WXWY8TOPNKh4hufy5AkHDmBDtSFl786FtQCvA81128NU0TiixDNOKYMGIIyvr3B8/z3aDdFdWbPeRnxli3dbNHfQCTJk2CbdtIJNLxXSQS6ZUVHC4b6BkYC8mkRRSvzryCBtIlAfEMUkY2o2hD+TDqS7Y7LwfQkwDw93cS29/4U+jcVs77H48SC2pN1S4ps8gJQPTxEEryAhOvPtWW/vWNaVBZpnZ9HeccPBjEdqKxKQKvOwOGYWH0SWNQtX4zTj/zdOzYvh1t4TCy+pXAadrw/utVGF9/acwKh79tt6wWANGe+n83gNsMjDK0trR3a/s9NX7W4z+HSAJ63ZAMDMy2Diq1MGZjUVVdrwygjBzaIcQ6medIDqGuaGD48OFobW3Fxo0b0bdvX7jdbmiaBofDkQa0zrSzC/QdDgcikQiqq6sxfPhwFBYW9vy8x1RMHXLmOdKp514zf3f1Zrz31Wewbdt0MFrVq5B5LOC/FbeTzLF/Zd5fM6jVhKQ2MSgpsFQMRE1SOSaS5xddmPfP057nzn77NAp8eEAfnz3wiseg9sMZ+dm/HzK6wu0J+QCrk9kJAeM6DSSkE/Q5gHAEhONACWCBIpFKYu3mddhTtxeapqezvIOURiyLtn61vP4W06T66eMKLwMMnlkCpO8a4V/agrisISYr4AUOIIBp2QjrKiJ7t9sdhvaJMqj8j4qs1P6fWD7fe+8iCIKJsWPXHF/ZlaO4556nsWLFWDQ05B3UwSKKVr8bbnuOMmDNv16dSUXJRVUZVJbBVAWWaTg3PPvnGQzA4KMkAcYYTMPkTMP4Y0zWytYnCPoHJORle9HudCObqpA4ggy/N2AoTZ/rdY2mKHAZNrUkTdeRl5dbxET3+OEjRjapsbY+Dkns4AjZZFGqd52jpaWlQUwsSsYoDaVrfDZCfh5uB4Os8QgnBCiyDMHvh8MB7NlDkJ9HUJCfj127qlFQkuN+8/1PoJiEijz9p2ka+7qHTXJK+Zc8+rwR6j9JYBaNymFDUVS8o/cBBQcai8ADA9SbBY0JAM9At3+IolAjTjv1VDgcDpimiba2NiSTye5IvyeBddk8u4ikqwbw0Ucf4eOPP+6WiACgoKAAkUgE0WgUPM8jPz8fiUQCra2tvWoJXYqGkExaLMZ2E0+qlgnBLCL4guA9buYMDiQQ8lGSXcdi9eo9Gz4eYo44f/vDPS/eVY917PnqmdBrusqdyXfU+Xh3pheAB4A72++QwmH0pddcU9uyfVcN/+83Bjjuux+S14uyQcUoLMmBZdpYvGQZJk44CYu+XYEhwyrw7crF+DV/MpwLPoD+4X/M90JZ675NJfcCaAEQ37+oyaz0BaUUyMnLOiD6P9ZsgLGtsC0Gy7QPsGJ1ZQBTRxSlSYIyMDCsXFV3SIcQWNradiSHUM/QNzc3FzkOB6qXL0di925kCwIU0wRycyHl5sIqKAAJBuFyubBx40a43W5MmzatV7Zg28de+/VmF8+eMG54psp4tq2mlu354ZWmgaV9Z741f/4x20rpZtxGMk98lvkvYUStBUutZ0yRATlGiJqgapznttb1y92ckW1d/vUl+O79Vw7aj2ma0/sNKbtnwEnDCBM4MCudqhOu01dNO3VYrmvjOsE/ncVFo1GsXLcGNfV7kZ7YyWAzBofD2ev6d90Dpk3bF63ad6tp29q0sUXXZC/bJwTXRhCTNcQVGbwopDMGy0azJqMZBtozXHuyB7jvyBsg1Ouar5ugOUJ+PgKgFKio2IBhw7Yddx9ZWR3QdR+efPIR/PGPLxyKBPrfeNtzjDGsefEfM6lpupiqAKaR1mcNw7mtkwSGHAUJsDTx9pdV7fIIJFKVkYvvZBX73HnITUTwhEcGTxlUOU6YFsv0' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= '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' $ImageEditor_Icons &= 'PCKxXEUzXIpjXx+XAAACIklEQVSq56iutKrl6JaAkTRZJskyZiLDrIiRVq4MDSQvDgZM4QS97FwUeI5HLBtNpNB9vhWmoSMUjaGt6zgC/QIWoyCQqCLLnjy3+wWXpnklSdImDCNjMBYaHYuOBKOx9IRuiHhqAtF4EvFUCha3H8iQZ45PhJSUFL9W5ivbYZrmP8lU8qxLMeOBoejVDLOMuXJp3ZORU0XTqjfskArL1sgFvhpBJFUYCdjxIOOjnXGz79pBwc0fnOokQrKnF4kDKZtD2jEhRGjS/hsaGop27tz5EQD3w5iBF2JjhJDxpqamxmcuAKzc/Km/lxf9WOR/pZRfavm17+SRXZxbw5iBBsJBqXMtecyvEkSWfqL7KXVdApAPwAvAjf+YPCXHGJjjPGOOAS1Y97eiomJNaWnpIb/fv7a5uXnsf77z5EWdlmzbRvcLQTuOHWOHQ6EpcQ4xQ7YvHuLwn5rX3HPoQE4mmfAKm7slShUhiJYZTypWT49EAgHI6TRXBbgmUdOtuUxPbj7z5HmYrCjMtIXFLG5luGWnGeMDsbD93fV2Hjb0qT49DwCzbGtMpNB19jdwMyt52tMXwJ/XbiB/kRe+4sVksbdAohKRAAlC2ETTNFAqwTK5CIYjfDgUFrFYVCSTKYzFxtHZN4j+keBUIchs31+mlHLb5gsdp3ucMpGoXFpZA6q+BJsXTpsTEOmIwROhUxCiez72PT4+jlgsRp/Ety8uLub/AhIKBb23x+IGAAAAAElFTkSuQmCC' Return Binary(_Base64Decode($ImageEditor_Icons)) EndFunc ;==>_ImageEditor_ToolbarIcons Func _WinTitle_Icon() Local $WinTitle_Icon $WinTitle_Icon &= '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' $WinTitle_Icon &= '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' $WinTitle_Icon &= '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' $WinTitle_Icon &= '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' $WinTitle_Icon &= 'NJay/AqAxetJ77XsD+igONcKoqd/eHa6PrvcvH9xbfDBMxflwO2H23T4gItS0cHDu06DiKFA8xjkhPcVTuPe3otwuMCaKsGwHBwYMsAtpzv+7nbB6ZfVvSKW6hF235RHsVjA5Re+ClJN2KaGTRlM1oaw2soFZyaWXvz+c6e/MXlt5YrSWm6SuGJTyC8DWAXQfrWwfy07RHTKmrNS6Wh8brU5u7z+ysHR3nfPLvYdf+kc792/R9O+XQH6KwoinMD9wzVsyzaTzVPEAbRBzARz93ZLJ2jzcEVCKYHz00AmV0Aum4XfbmBx5hz8Vgb5TFkrlV0fn1k+9cOXTj82WVu9Ijceb3XuGKfGrqbGN9Ka/1P3Gd/IHqFOJNQABF4oGicvzc+dm155au9Q6a2HZ/pu33mxPFIdcJ3h/ptRrbSxRjZcsw2Dh2AUgRGHFq1k/KAlZLAMLUMoKSCFhi+yOD+1A70jvSj3lDF++hnMzfPIC4z5hZXZZ8emFp9fXmsvph7vBI7aZPhaanx9k9f1G7lTtFNLV9L8WvXCeOHlyaWpV6aWT1Ty7ujOanHvnqHSntH+YrW/Mpovl7JmPm+yXJbBdQiZbAbV/fdAiRALMycQhzFETAgCrZfCHHxVomw2C86Y+Pq3vndh/PLUVL3RPttqt68qpTZv7ZKpQ9qppzcbHt+I1/82W2Vl+kVhinpNKj242PBmFxvehefH5vOOxfOlrN3TW3QrvQWnXCk4xZxrZcrFvL3ncMYUUaCnxs77rbbvN/14faUZrY3sv/1tQ7uGdzu2hVfOnl0+c+HSlSAI5vwgmFdKRalhUZqOrdTwjqrz0vcUXsfxerbKblZWXppzBQBlrXXZD0WPH4p8bbXtbpq+MsaIrK+fZlprHcWx1Forzjm/7bYjR+/ac3hwdmYGC7VrauLKxJU4jleiKJoQQtTSEualr80UgI4TxOs1/I3YLN0BQmwCwgGQS89seroAbKW0GYQh37yR8ejRYw9+8IM//7HG2prRbrVxaXzMn5uvjSmlTsZxfEZr3WFyPzU42mS0xhtwvBHb5fWmCUuUeoinp5VGgbnpYQQB0Pl8fmjvnpvum52dNZaXlrC0uIi257WJ6BQRPaG1nkvvJ7duLHxjjzf6FyObwUBairCpMaHORsbB4dG3elapt7G4gLC5Ds9rqyiOnuGcn7dtezqNqr/z4+/6N0P6utdkB3epxI23PPjeuZG7+Jq6gOzqE2q9HZyIhfgmEU0rpUKl1Jth/5v/qzHbtpHNl/LVnfuOSRCWdF5Mqt6ngzD4cwDPKqXmWq2W/Jt+MPH/WwRsOUzTRE9PxcjuOfbhRZnfNzM2dtW4/NjXMsvnvkNKjCmlFur1euh53pu2JnozAahUKmRV990S77j7N7EwNuasXHyCCX9Ca73q+77fbDbV9dvZf6YA6O/vJ8fNFAHkoVVbKdX2fT/2PE8FQYA3K+z/3gAwTRPlcpmIiHzf157n6Vfbwf1mHv8XzrTv/92cfWUAAAAASUVORK5CYII=' Return Binary(_Base64Decode($WinTitle_Icon)) EndFunc ;==>_WinTitle_Icon Func Load_BMP_From_Mem($bImage, $hHBITMAP = False) If Not IsBinary($bImage) Then Return SetError(1, 0, 0) Local $aResult Local Const $memBitmap = Binary($bImage) ;load image saved in variable (memory) and convert it to binary Local Const $len = BinaryLen($memBitmap) ;get length of image Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002) Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0) ;Creates a stream object that uses an HGLOBAL memory handle to store the stream contents If @error Then Return SetError(2, 0, 0) Local Const $hStream = $aResult[3] $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface If @error Then Return SetError(3, 0, 0) Local Const $hBitmap = $aResult[2] Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr") DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _ "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak $tMem = 0 $tVARIANT = 0 If $hHBITMAP Then Local Const $hHBmp = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBmp EndIf Return $hBitmap EndFunc ;==>Load_BMP_From_Mem Func _Blur($hBitmap, $iW, $iH, $dx1 = -5, $dx2 = -3, $dy1 = 12, $dy2 = 9, $fScale = 0.175, $qual = 6); by eukalyptus Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow()) Local $hBmpSmall = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphics) Local $hGfxSmall = _GDIPlus_ImageGetGraphicsContext($hBmpSmall) DllCall($ghGDIPDll, "uint", "GdipSetPixelOffsetMode", "handle", $hGfxSmall, "int", 2) Local $hBmpBig = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphics) Local $hGfxBig = _GDIPlus_ImageGetGraphicsContext($hBmpBig) DllCall($ghGDIPDll, "uint", "GdipSetPixelOffsetMode", "handle", $hGfxBig, "int", 2) _GDIPlus_GraphicsScaleTransform($hGfxSmall, $fScale, $fScale) _GDIPlus_GraphicsSetInterpolationMode($hGfxSmall, $qual) _GDIPlus_GraphicsScaleTransform($hGfxBig, 1 / $fScale, 1 / $fScale) _GDIPlus_GraphicsSetInterpolationMode($hGfxBig, $qual) _GDIPlus_GraphicsDrawImageRect($hGfxSmall, $hBitmap, 0, $dx1, $iW, $iH + $dy2) _GDIPlus_GraphicsDrawImageRect($hGfxBig, $hBmpSmall, 0, $dx2, $iW, $iH + $dy2) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_BitmapDispose($hBmpSmall) _GDIPlus_GraphicsDispose($hGfxSmall) _GDIPlus_GraphicsDispose($hGfxBig) Return $hBmpBig EndFunc ;==>_Blur Func ASM_Bitmap_Pixelize($bmp, $iSize = 8) ;ASM code by TheShadowAE Local $w = _GDIPlus_ImageGetWidth($bmp), $h = _GDIPlus_ImageGetHeight($bmp) $w -= Mod($w, $iSize) $h -= Mod($h, $iSize) Local Const $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($bmp) Local $yBmp, $ptr Local Const $dc = _CreateNewBmp32($w, $h, $ptr, $yBmp) Local Const $xdc = _WinAPI_CreateCompatibleDC(0) Local Const $dc_obj = _WinAPI_SelectObject($xdc, $hHBmp) _WinAPI_BitBlt($dc, 0, 0, $w, $h, $xdc, 0, 0, $SRCCOPY) Local Const $bASM_Pix = "0x8B5C240C8B7C24106BFF048B7424046BF6048B5424088B4C24048B035351528B54241C8B4C241C890383C3044975F801F329FB4A75ED5A595B01FB2B4C241075D98B442410480FAFC601C32B54241075C5C3" Local $tCodeBuffer = DllStructCreate("byte[" & BinaryLen($bASM_Pix) & "]") ;reserve Memory for opcodes DllStructSetData($tCodeBuffer, 1, $bASM_Pix) ;write opcodes into memory DllCall("kernel32.dll", "int", "VirtualProtect", "ptr", DllStructGetPtr($tCodeBuffer), "ulong", BinaryLen($bASM_Pix), "dword", $PAGE_EXECUTE_READWRITE, "dword*", 0) ;avoid crash when DEP is activates for all programs and services! Thanks to progandy DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($tCodeBuffer), "int", $w, "int", $h, "ptr", $ptr, "int", $iSize) _GDIPlus_BitmapDispose($hBmp) $hBmp = _GDIPlus_BitmapCreateFromHBITMAP($yBmp) _WinAPI_DeleteObject($yBmp) _WinAPI_DeleteObject($hHBmp) _WinAPI_SelectObject($xdc, $dc_obj) _WinAPI_DeleteDC($xdc) _WinAPI_ReleaseDC(0, $dc) $ptr = 0 $tCodeBuffer = 0 EndFunc ;==>ASM_Bitmap_Pixelize Func ASM_Bitmap_Rasterize($vBmp, $iColor = 0x000000) ;ASM code by AndyG $vBitmap = _GDIPlus_BitmapCloneArea($vBmp, 0, 0, $bW, $bH) If Not $vBitmap Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) Local Const $hBitmapData = _GDIPlus_BitmapLockBits($vBitmap, 0, 0, $bW, $bH, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32RGB) Local Const $Scan = DllStructGetData($hBitmapData, "Scan0") Local Const $Stride = DllStructGetData($hBitmapData, "Stride") Local $tPixelData = DllStructCreate("dword[" & (Abs($Stride * $bH)) & "]", $Scan) Local Const $bASM_Rasterize = "0x8B7424048B4C24088B7C240C8B4424100FBAE0007238BB0100000039C3730E893E83C60883C30283E90277EFC30FBAE300730EBB0000000083C60483E90177DBC3BB0100000083EE0483C101EBCD893E83C60883E90277F6C3" Local Const $iSize = BinaryLen($bASM_Rasterize) Local Const $pCodeBuffer = _MemVirtualAlloc(0, $iSize, $MEM_COMMIT, $PAGE_EXECUTE_READWRITE) Local $tCodeBuffer = DllStructCreate("byte[" & $iSize & "]", $pCodeBuffer) DllStructSetData($tCodeBuffer, 1, $bASM_Rasterize) DllCallAddress("int:cdecl", $pCodeBuffer, "ptr", DllStructGetPtr($tPixelData), "int", $bW * $bH, "int", $iColor, "int", $bW) _MemVirtualFree($pCodeBuffer, $iSize, $MEM_DECOMMIT) _GDIPlus_BitmapUnlockBits($vBitmap, $hBitmapData) _GDIPlus_BitmapDispose($vBmp) $hBmp = $vBitmap $tCodeBuffer = 0 $tPixelData = 0 EndFunc ;==>ASM_Bitmap_Rasterize Func ASM_Bitmap_Grey_BnW($vBmp, $iBlackAndWhite = 0, $iLight = 160, $skip = False) ;ASM code by AndyG ;~ $undo = _GDIPlus_BitmapCloneArea($vBmp, 0, 0, $bW, $bH) ;~ $undo_chk = True $vBitmap = _GDIPlus_BitmapCloneArea($vBmp, 0, 0, $bW, $bH) If Not $vBitmap Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) Local Const $hBitmapData = _GDIPlus_BitmapLockBits($vBitmap, 0, 0, $bW, $bH, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32RGB) Local Const $Scan = DllStructGetData($hBitmapData, "Scan0") Local Const $Stride = DllStructGetData($hBitmapData, "Stride") Local $tPixelData = DllStructCreate("dword[" & (Abs($Stride * $bH)) & "]", $Scan) Local Const $bASM_GBW = "0x8B7C24048B5424088B5C240CB900000000C1E202575352518B040FBA00000000BB00000000B90000000088C2C1E80888C3C1E80888C18B44240883F800772FB85555000001CB01D3F7E3C1E810BB00000000B3FFC1E30888C3C1E30888C3C1E30888C389D8595A5B5F89040FEB3B89C839C3720289D839C2720289D05089F839C3770289D839C2770289D05B01D8BBDC780000F7E3C1E810595A5B5F3B4424107213C7040FFFFFFF0083C10439D1730EE95FFFFFFFC7040F00000000EBEBC3" Local Const $iSize = BinaryLen($bASM_GBW) Local Const $pCodeBuffer = _MemVirtualAlloc(0, $iSize, $MEM_COMMIT, $PAGE_EXECUTE_READWRITE) Local $tCodeBuffer = DllStructCreate("byte[" & $iSize & "]", $pCodeBuffer) DllStructSetData($tCodeBuffer, 1, $bASM_GBW) DllCallAddress("int:cdecl", $pCodeBuffer, "ptr", DllStructGetPtr($tPixelData), "int", $bH * $bW, "int", $iBlackAndWhite, "int", $iLight) _MemVirtualFree($pCodeBuffer, $iSize, $MEM_DECOMMIT) _GDIPlus_BitmapUnlockBits($vBitmap, $hBitmapData) _GDIPlus_BitmapDispose($hBmp) $hBmp = $vBitmap ;~ If Not $skip Then ;~ $hClipboard_Bitmap = _WinAPI_CopyImage(_GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp), 0, 0, 0, $LR_COPYDELETEORG + $LR_COPYRETURNORG) ;~ Draw2Graphic($hBmp) ;~ EndIf $tPixelData = 0 $tCodeBuffer = 0 EndFunc ;==>ASM_Bitmap_Grey_BnW Func ASM_Bitmap_Invert($vvvBmp, $skip = False) ;ASM code by AndyG ;~ $undo = _GDIPlus_BitmapCloneArea($vvvBmp, 0, 0, $bW, $bH) ;~ $undo_chk = True $vBitmap = _GDIPlus_BitmapCloneArea($vvvBmp, 0, 0, $bW, $bH) If Not $vBitmap Or @error Then Return MsgBox(16 + 262144, "ERROR", "Whoops an internal error has occured: unable to clone bitmap!" & @CRLF & @CRLF & _ "Sorry for inconvenience! :-(", 20, WinGetHandle(AutoItWinGetTitle())) Local Const $hBitmapData = _GDIPlus_BitmapLockBits($vBitmap, 0, 0, $bW, $bH, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32RGB) Local Const $Scan = DllStructGetData($hBitmapData, "Scan0") Local Const $Stride = DllStructGetData($hBitmapData, "Stride") Local $tPixelData = DllStructCreate("dword[" & (Abs($Stride * $bW)) & "]", $Scan) Local Const $bASM_Inv = "0x8B7424048B4C24088136FFFFFF0083C60483E90177F2C3" Local Const $iSize = BinaryLen($bASM_Inv) Local Const $pCodeBuffer = _MemVirtualAlloc(0, $iSize, $MEM_COMMIT, $PAGE_EXECUTE_READWRITE) Local $tCodeBuffer = DllStructCreate("byte[" & $iSize & "]", $pCodeBuffer) DllStructSetData($tCodeBuffer, 1, $bASM_Inv) DllCallAddress("int:cdecl", $pCodeBuffer, "ptr", DllStructGetPtr($tPixelData), "int", $bW * $bH) _MemVirtualFree($pCodeBuffer, $iSize, $MEM_DECOMMIT) _GDIPlus_BitmapUnlockBits($vBitmap, $hBitmapData) _GDIPlus_BitmapDispose($vvvBmp) $hBmp = $vBitmap ;~ If Not $skip Then ;~ $hClipboard_Bitmap = _WinAPI_CopyImage(_GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp), 0, 0, 0, $LR_COPYDELETEORG + $LR_COPYRETURNORG) ;~ Draw2Graphic($hBmp) ;~ EndIf $tCodeBuffer = 0 EndFunc ;==>ASM_Bitmap_Invert Func _GDIPlus_GraphicsScaleTransform($hGraphics, $nScaleX, $nScaleY, $iOrder = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipScaleWorldTransform", "handle", $hGraphics, "float", $nScaleX, "float", $nScaleY, "int", $iOrder) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsScaleTransform Func _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hGraphics, "int", $iInterpolationMode) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsSetInterpolationMode Func _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap) Local $tBIHDR, $ret, $tData, $pBits, $hResult = 0 $ret = DllCall($ghGDIPDll, 'uint', 'GdipGetImageDimension', 'ptr', $hBitmap, 'float*', 0, 'float*', 0) If (@error) Or ($ret[0]) Then Return 0 $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $ret[2], $ret[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB) $pBits = DllStructGetData($tData, 'Scan0') If Not $pBits Then Return 0 $tBIHDR = DllStructCreate('dword;long;long;ushort;ushort;dword;dword;long;long;dword;dword') DllStructSetData($tBIHDR, 1, DllStructGetSize($tBIHDR)) DllStructSetData($tBIHDR, 2, $ret[2]) DllStructSetData($tBIHDR, 3, $ret[3]) DllStructSetData($tBIHDR, 4, 1) DllStructSetData($tBIHDR, 5, 32) DllStructSetData($tBIHDR, 6, 0) $hResult = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBIHDR), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'dword', 0) If (Not @error) And ($hResult[0]) Then DllCall('gdi32.dll', 'dword', 'SetBitmapBits', 'ptr', $hResult[0], 'dword', $ret[2] * $ret[3] * 4, 'ptr', DllStructGetData($tData, 'Scan0')) $hResult = $hResult[0] Else $hResult = 0 EndIf _GDIPlus_BitmapUnlockBits($hBitmap, $tData) Return $hResult EndFunc ;==>_GDIPlus_BitmapCreateDIBFromBitmap Func _Base64Decode($input_string) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode This version is buggy and only a proof of concept!!! If I find time I will write a seperate basic image editor from scratch. Br, UEZ
    1 point
×
×
  • Create New...