Jump to content

Recommended Posts

Func dg_get_images()
   $x1=0
   $y1=0
   ;MsgBox(0,"start","start")
   do
      $result =  _ImageSearch("C:\Users\Server\Desktop\my project\image.png",1,$x1,$y1,0)
   until $result = 1;
   if $result=1 Then
       MouseMove($x1,$y1,3)
       MouseClick("left", $x1,$y1, 1)
       WinWait("[Title:TightVNC File Transfer]", "", 10)
   EndIf

 this code works when i search the image, but when i change the location of the desktop icon it can't find the desktop icon anymore.   i wanna try image search area. but i don't know how to use it because i cant understand the parameter for the image search area.  please help me how to solve it thank you in advance.

Link to post
Share on other sites
  • 4 weeks later...

Hi buddy, you can try below code in your project. The code is affected by $tolerance value. You can find the most appropriate parameter value by trial and error method. I set it for 150. You can change the value in 0 to 255 to find your icon on the desktop.

#include <ImageSearch2015.au3>

Local $left = 0
Local $top = 0
Local $right = @DeskTopWidth
Local $bottom = @DeskTopHeight
Local $tolerance = 150
Local $transparency = 0


$file = "C:\Users\Server\Desktop\my project\image.png"
sleep(5000)

while true
    dg_get_images()
    sleep(1000)
Wend

Func dg_get_images()
   $x1=0
   $y1=0

   do
      $result =  _ImageSearchArea($file, 1, $left, $top, $right, $bottom, $x1, $y1, $tolerance, $transparency)
   until $result = 1;

   if $result=1 Then
       MouseMove($x1,$y1,3)
       MouseClick("left", $x1,$y1, 1)
       WinWait("[Title:TightVNC File Transfer]", "", 10)
   EndIf
EndFunc

good work.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By lamnhan066
      Today, I will share my work with image search in inactive windows (windows that run in the background) with tolerances (variations).
      After a long time of searching and using image search UDF on the internet. I combined all of that with my experienced and created a UDF name HandleImgSearch.
      I have embedded the .dll file in this script so it doesn't need any external files, just include it and run. However, this UDF have a feature that will make it run slower is $MaxImg variable, this variable will allow you to return multiple positions of a finding image.
      Some highlights:
      Very fast with imagesearchdll embedded, no external files required. Tolerances and Max Images are supported. Optimized. Use with handle or full screen easily. Included global functions, so you can run multiple functions in one capture. Examples used for testing included. Notes:
      Only use to compile to 32 bit AutoIt version (It can completely run on Windows 64 bit) Image use for searching should be a "24-bit Bitmap" format. I included $IsUser32 variable in some places like _GlobalImgInit, _HandleCapture. This variable allowed you to use DllCall with "PrintWindow" parameter instead of _WinAPI_BitBlt with $SRCCOPY. $IsUser32 = True is useful for window explorer handle, $IsUser32 = False is useful for the emulator handle (NoxPlayer handle example included). If hwnd parameter equal "", it will use whole screen instead. Functions:
      Global Functions: Run multiple functions with one capture. _GlobalImgInit: Initialization variables. _GlobalImgCapture: Capture the handle. _GlobalGetBitmap: Get captured bitmap handle. _GlobalImgSearch: This is the main function of this UDF. _GlobalGetPixel: Get pixel color in captured image. _GlobalPixelCompare: Compare pixel color with captured image pixel color. Handle Functions: Capture every time. _HandleImgSearch: This is the main function of this UDF. Search for images in the handle of the window with the tolerance and maximum image options. _BmpImgSearch: Search picture in picture instead of handle. _HandleGetPixel: Get pixel in handle image. _HandlePixelCompare: Compare color with pixel color of handle image. _HandleCapture: Capture handle screen. Source code: 
      v1.0.5 (First release): https://github.com/lamnhan066/HandleImgSearch/tree/v1.0.5 Thanks to:
      ImageSearchDLL (Author: kangkeng 2008) MemoryCall (Author: Joachim Bauch) BinaryCall (Author: Ward) GAMERS - Asking for help with ANY kind of game automation is against the forum rules. DON'T DO IT.
       
       
    • By UEZ
      As already annouced in >this topic here the GUI version of the GDI+ v1.1 color effects.
       

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