dushu Posted April 4, 2015 Share Posted April 4, 2015 Hello, I recently discovered autoIt and find it very user friendly and easy to use. What I'm trying to do is a very simple image editor in wich to load images (simple images, monochrome) and to be able to calculate a specifica area. So let's say there is a main square and inside are three circles. I want to calculate the circles area as a percentage from the square area. The frame of the square will be adjustable, manually with mouse (like select option in paint) and the area of the circles to be calculated will be filled (also manually) with a brush like paint brushes option. Is it possible to do it in AutoIt? if yes please help me with some hints and what functions to use. Link to comment Share on other sites More sharing options...
TheDcoder Posted April 4, 2015 Share Posted April 4, 2015 Its hard to do, but try GDI+ function set TD EasyCodeIt - A cross-platform AutoIt implementation - Fund the development! (GitHub will double your donations for a limited time) DcodingTheWeb Forum - Follow for updates and Join for discussion Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted April 4, 2015 Moderators Share Posted April 4, 2015 dushu,This old script of mine might give you some ideas of how to proceed:expandcollapse popup#include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #Include <ScreenCapture.au3> Global $hCapture_GUI ; Set distance from edge of Capture_GUI where resizing is possible Global Const $iMargin = 4 ; Set max and min Capture_GUI sizes Global Const $iGUIMinX = 50, $iGUIMinY = 50, $iGUIMaxX = @DesktopWidth - 100, $iGUIMaxY = @DesktopHeight - 100 _Main() Func _Main() Local $sBMP_Path = @ScriptDir & "\Rect.bmp" ; Create GUI Local $hMain_GUI = GUICreate("Select Rectangle", 240, 50) Local $hRect_Button = GUICtrlCreateButton("Mark Area", 10, 10, 80, 30) Local $hCancel_Button = GUICtrlCreateButton("Cancel", 150, 10, 80, 30) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $hCancel_Button FileDelete($sBMP_Path) Exit Case $hRect_Button GUISetState(@SW_HIDE, $hMain_GUI) Local $aCoords = Mark_Rect() ; Capture selected area _ScreenCapture_Capture($sBMP_Path, $aCoords[0], $aCoords[1], $aCoords[0] + $aCoords[2], $aCoords[1] + $aCoords[3], False) GUISetState(@SW_SHOW, $hMain_GUI) ; Display image Local $hBitmap_GUI = GUICreate("Selected Rectangle", $aCoords[2], $aCoords[3], 100, 100) Local $hPic = GUICtrlCreatePic(@ScriptDir & "\Rect.bmp", 0, 0, $aCoords[2], $aCoords[3]) GUISetState() EndSwitch WEnd EndFunc ;==>_Main ; ------------- Func Mark_Rect() ; Create capture GUI $hCapture_GUI = GUICreate("Y", 100, 100, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) GUISetBkColor(0xABCDEF) ; Create label for dragging Local $cLabel = GUICtrlCreateLabel("", $iMargin * 2, $iMargin * 2, 100 - ($iMargin * 4), 100 - ($iMargin * 4), -1, $GUI_WS_EX_PARENTDRAG) GUICtrlSetBkColor(-1, 0xFFFFFF) GUICtrlSetResizing(-1, $GUI_DOCKBORDERS) ; Create context menu Local $cContextMenu = GUICtrlCreateContextMenu($cLabel) $cContext_Capture = GUICtrlCreateMenuItem("Capture", $cContextMenu) $cContext_Cancel = GUICtrlCreateMenuItem("Cancel", $cContextMenu) ; Hide GUI _WinAPI_SetLayeredWindowAttributes($hCapture_GUI, 0xABCDEF, 250) GUISetState() ; Set transparency level WinSetTrans($hCapture_GUI, "", 100) ; Register message handlers GUIRegisterMsg($WM_MOUSEMOVE, "_SetCursor") ; For cursor type change GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN") ; For resize/drag GUIRegisterMsg($WM_GETMINMAXINFO, "_WM_GETMINMAXINFO") ; For GUI size limits While 1 Switch GUIGetMsg() Case $cContext_Capture ; Get GUI position and delete $aPos = WinGetPos($hCapture_GUI) GUIDelete($hCapture_GUI) ; Unregister message handlers GUIRegisterMsg($WM_MOUSEMOVE, "") GUIRegisterMsg($WM_LBUTTONDOWN, "") GUIRegisterMsg($WM_GETMINMAXINFO, "") ; Peturn position Return $aPos Case $cContext_Cancel Exit EndSwitch WEnd EndFunc ;==>Mark_Rect ; Set cursor to correct resizing form if mouse is over a border Func _SetCursor() Local $iCursorID Switch _Check_Border() Case 0 $iCursorID = 2 Case 1, 2 $iCursorID = 13 Case 3, 6 $iCursorID = 11 Case 5, 7 $iCursorID = 10 Case 4, 8 $iCursorID = 12 EndSwitch GUISetCursor($iCursorID, 1) EndFunc ;==>_SetCursor ; Check cursor type and resize/drag window as required Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) Local $iCursorType = _Check_Border() If $iCursorType > 0 Then ; Cursor is set to resizing style so send appropriate resize message $iResizeType = 0xF000 + $iCursorType _SendMessage($hCapture_GUI, $WM_SYSCOMMAND, $iResizeType, 0) EndIf EndFunc ;==>_WM_LBUTTONDOWN ; Determines if mouse cursor over a border Func _Check_Border() Local $aCurInfo = GUIGetCursorInfo($hCapture_GUI) Local $aWinPos = WinGetPos($hCapture_GUI) Local $iSide = 0 Local $iTopBot = 0 If $aCurInfo[0] < $iMargin Then $iSide = 1 If $aCurInfo[0] > $aWinPos[2] - $iMargin Then $iSide = 2 If $aCurInfo[1] < $iMargin Then $iTopBot = 3 If $aCurInfo[1] > $aWinPos[3] - $iMargin Then $iTopBot = 6 Return $iSide + $iTopBot EndFunc ;==>_Check_Border ; Set min and max GUI sizes Func _WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam) $tMinMaxInfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam) DllStructSetData($tMinMaxInfo, 7, $iGUIMinX) DllStructSetData($tMinMaxInfo, 8, $iGUIMinY) DllStructSetData($tMinMaxInfo, 9, $iGUIMaxX) DllStructSetData($tMinMaxInfo, 10, $iGUIMaxY) Return 0 EndFunc ;==>_WM_GETMINMAXINFOYou can resize the rectangle using the blue borders and drag it using the white interior. When you are happy with the position and size, right-click to open a context menu. As circles can be defined by a bounding square, you could do much the same thing to indicate where these 3 circles should be - the calculations to get the percentage covered by them would then be relatively simple maths. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
UEZ Posted April 4, 2015 Share Posted April 4, 2015 (edited) Hello, I recently discovered autoIt and find it very user friendly and easy to use. What I'm trying to do is a very simple image editor in wich to load images (simple images, monochrome) and to be able to calculate a specifica area. So let's say there is a main square and inside are three circles. I want to calculate the circles area as a percentage from the square area. The frame of the square will be adjustable, manually with mouse (like select option in paint) and the area of the circles to be calculated will be filled (also manually) with a brush like paint brushes option. Is it possible to do it in AutoIt? if yes please help me with some hints and what functions to use. It's always a good attitude to have visions and goals but it is not that easy to write a "simple" image editor. I don't know how your coding / math skills are but you have to know a lot of GUI coding techniques and of course the understanding of GDI / GDIPlus. But it is possible to do it with AutoIt! This is the code from a very early stage of the image editor I used for Windows Screenshooter. That means it is buggy and unstable! expandcollapse popup#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($__g_hGDIPDll, "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($__g_hGDIPDll, "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($__g_hGDIPDll, "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($__g_hGDIPDll, "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($__g_hGDIPDll, "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($__g_hGDIPDll, "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 #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_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_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($__g_hGDIPDll, "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($__g_hGDIPDll, "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 &= '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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 &= '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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($__g_hGDIPDll, "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($__g_hGDIPDll, "uint", "GdipSetPixelOffsetMode", "handle", $hGfxSmall, "int", 2) Local $hBmpBig = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphics) Local $hGfxBig = _GDIPlus_ImageGetGraphicsContext($hBmpBig) DllCall($__g_hGDIPDll, "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_BitmapCreateDIBFromBitmap($hBitmap) Local $tBIHDR, $ret, $tData, $pBits, $hResult = 0 $ret = DllCall($__g_hGDIPDll, '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 Some of the FX functions are crashing in this version! Edited April 4, 2015 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
dushu Posted April 5, 2015 Author Share Posted April 5, 2015 @Melba23 - GUI was (still is) my big trouble, the maths are the easiest part @UEZ - you are right, 'simple' is not simple at all ... I'm glad to know that's douable, the rest is time and perseverance Many thanks for help! dushu Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now