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