Jump to content

custom image editor


dushu
 Share

Recommended Posts

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

  • Moderators

dushu,

This old script of mine might give you some ideas of how to proceed:

#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_GETMINMAXINFO
You 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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

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!

 

#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 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

@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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...