Sign in to follow this  
Followers 0
Mikeman27294

Changing image hue

5 posts in this topic

#1 ·  Posted (edited)

Hey everyone.

I want to add a theming engine to a program of mine, so that there is multiple hues, ie red, green, orange, blue and so on. I also want to be able to change the brightness of the background, ie you can choose between a range oflight greys through to dark greys.

I have searched the forum and came across this:

#include<Array.au3>

#include<Color.au3>

#include<GUIConstantsEx.au3>

GUICreate("",360,350)
$gra = GUICtrlCreateGraphic(0,0,360,20)
GUISetState()
$Color = 0xFFff00
GUISetBkColor($Color)
ConsoleWrite("Color: 0x" & Hex($Color, 6) & @CRLF)
ConsoleWrite("Saturation: " & _Color_GetSaturation($Color) & " %" & @CRLF)
ConsoleWrite("Brightness: " & _Color_GetBrightness($Color) & " %" & @CRLF)
ConsoleWrite("Hue: " & _Color_GetHue($Color) & " º" & @CRLF)
Sleep(1000)
ConsoleWrite("Complementary color: " & _Color_FindComplementary($Color) & @CRLF & @CRLF)
$i = 0
While $i < 2
    $i += 1
    GUISetBkColor(_Color_FindComplementary($Color))
    Sleep(500)
    GUISetBkColor($Color)
    Sleep(500)
WEnd
GUISetBkColor(0)
For $x = 0 To 360 Step 2
    $hue = _Color_SetHue($Color, $x)
    ConsoleWrite("Hue: " & $x & " º" & $hue & @CRLF)
;~  GUISetBkColor($hue)
    GUICtrlSetGraphic($gra,$GUI_GR_COLOR,$hue,$hue)
    GUICtrlSetGraphic($gra,$GUI_GR_RECT,$x,0,2,20)
    GUICtrlSetGraphic($gra,$GUI_GR_REFRESH)
    Sleep(30)
 
Next
Sleep(500)
GUISetBkColor($Color)
GUICtrlDelete($gra)
$gra = GUICtrlCreateGraphic(0,0,350,20)
$gra2 = GUICtrlCreateGraphic(0,20,350,20)
 
 
ConsoleWrite("  Saturation:  Brightness:" & @CRLF)
For $x = 0 To 100
    $sat = _Color_SetSaturation($Color, $x)
    $brigth = _Color_SetBrightness($Color, $x)
    ConsoleWrite($x & " % " & $sat & "   " & $brigth & @CRLF)
    GUICtrlSetGraphic($gra,$GUI_GR_COLOR,$sat,$sat)
    GUICtrlSetGraphic($gra2,$GUI_GR_COLOR,$brigth,$brigth)
    GUICtrlSetGraphic($gra,$GUI_GR_RECT,350*$x/100,0,Ceiling (350/100),20)
    GUICtrlSetGraphic($gra2,$GUI_GR_RECT,350*$x/100,0,Ceiling( 350/100),20)
    GUICtrlSetGraphic($gra,$GUI_GR_REFRESH)
    GUICtrlSetGraphic($gra2,$GUI_GR_REFRESH)
    Sleep(30)
Next
 
Func _Color_SetSaturation($iColor, $nPercent)
    Local $aColorArray[4]
    $nPercent = 1 - ($nPercent / 100)
 
    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)
 
    If $aColorArray[1] = $aColorArray[2] And $aColorArray[2] = $aColorArray[3] Then Return -1
 
    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)
    $IndexMid = 6 - ($IndexMax + $IndexMin)
 
    $aColorArray[$IndexMid] = ($aColorArray[$IndexMax] * ($aColorArray[$IndexMid] - $aColorArray[$IndexMin])) / ($aColorArray[$IndexMax] - $aColorArray[$IndexMin])
    $aColorArray[$IndexMid] = Round($aColorArray[$IndexMid] + ($aColorArray[$IndexMax] - $aColorArray[$IndexMid]) * $nPercent, 0)
 
    $aColorArray[$IndexMin] = Round($aColorArray[$IndexMax] * $nPercent, 0)
    Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2)
EndFunc   ;==>_Color_SetSaturation
 
Func _Color_GetSaturation($iColor)
    Local $aColorArray[4]
 
    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)
 
    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)
    $IndexMid = 6 - ($IndexMax + $IndexMin)
    Return Round((1 - $aColorArray[$IndexMin] / $aColorArray[$IndexMax]) * 100, 0)
EndFunc   ;==>_Color_GetSaturation
 
Func _Color_SetBrightness($iColor, $nPercent)
    Local $aColorArray[4]
    $nPercent = $nPercent / 100
 
    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)
 
    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    $ActBrightness = $aColorArray[$IndexMax] / 255
    For $i = 1 To 3
        $aColorArray[$i] = Round($aColorArray[$i] * $nPercent / $ActBrightness, 0)
    Next
    Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2)
EndFunc   ;==>_Color_SetBrightness
 
Func _Color_GetBrightness($iColor)
    Local $aColorArray[4]
 
    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)
 
    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    Return Round(($aColorArray[$IndexMax] / 255) * 100, 0)
EndFunc   ;==>_Color_GetBrightness
 
Func _Color_SetHue($iColor, $iHue)
    Local $aColorArray[4]
 
    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)
 
    $iMax = _ArrayMax($aColorArray, 1, 1)
    $iMin = _ArrayMin($aColorArray, 1, 1)
 
    If $iHue >= 61 And $iHue <= 180 Then
        $IndexMax = 2
        If $iHue < 120 Then
            $IndexMin = 3
            $iMid = (($iMax - $iMin) * (120 - $iHue)) / 60 + $iMin
        Else
            $IndexMin = 1
            $iMid = (($iMax - $iMin) * ($iHue - 120)) / 60 + $iMin
        EndIf
    ElseIf $iHue >= 181 And $iHue <= 299 Then
        $IndexMax = 3
        If $iHue <= 240 Then
            $IndexMin = 1
            $iMid = (($iMax - $iMin) * (240 - $iHue)) / 60 + $iMin
        Else
            $IndexMin = 2
            $iMid = (($iMax - $iMin) * ($iHue - 240)) / 60 + $iMin
        EndIf
    ElseIf $iHue >= 300 Or $iHue <= 60 Then
        $IndexMax = 1
        If $iHue <= 60 Then
            $IndexMin = 3
            $iMid = (($iMax - $iMin) * ($iHue)) / 60 + $iMin
        Else
            $IndexMin = 2
            $iMid = (($iMax - $iMin) * (360 - $iHue)) / 60 + $iMin
        EndIf
    EndIf
    $IndexMid = 6 - ($IndexMin + $IndexMax)
    $aColorArray[$IndexMin] = $iMin
    $aColorArray[$IndexMax] = $iMax
    $aColorArray[$IndexMid] = $iMid
    Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2)
EndFunc   ;==>_Color_SetHue
 
Func _Color_GetHue($iColor)
    Local $aColorArray[4], $Hue
 
    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)
 
    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)
    $IndexMid = 6 - ($IndexMax + $IndexMin)
    $Lambda = ($aColorArray[$IndexMid] - $aColorArray[$IndexMin]) * 60 / ($aColorArray[$IndexMax] - $aColorArray[$IndexMin])
 
    Switch $IndexMax
        Case 1
            Switch $IndexMin
                Case 2
                    $Hue = 360 - $Lambda
                Case 3
                    $Hue = $Lambda
            EndSwitch
        Case 2
            Switch $IndexMin
                Case 1
                    $Hue = 120 + $Lambda
                Case 3
                    $Hue = 120 - $Lambda
            EndSwitch
        Case 3
            Switch $IndexMin
                Case 1
                    $Hue = 240 - $Lambda
                Case 2
                    $Hue = 240 + $Lambda
            EndSwitch
    EndSwitch
    Return Round($Hue, 0)
EndFunc   ;==>_Color_GetHue
 
Func _Color_FindComplementary($iColor)
    Local $iHue = Mod(_Color_GetHue($iColor) + 180, 360)
    Return _Color_SetHue($iColor, $iHue)
EndFunc   ;==>_Color_FindComplementary

However, I dont quite understand the hue changing function in this, or the brightness function. Are there any easier ways to do something like this? Otherwise, can someone please help me make sense of the hue and brightness functions?

Thanks.

Finally the autoit tags are working so there u go. Sorry bouth that, it was only showing the first few lines and then it swallowed up the edit button and all those buttons and so on.

Edited by Mikeman27294

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Try passing the code, after first switching the post editor in code mode. An post it in that mode to(if posting in normal mode also screws things up.) ...

Erm: Yep ... Don't post in Normal mode ;)

Grr: ... don't even switch to normal mode ... :graduated:

test: (will be removed again) (guess not yet ... )

#include<Array.au3>
#include<Color.au3>
#include<GUIConstantsEx.au3>


GUICreate("", 360, 350)
$gra = GUICtrlCreateGraphic(0, 0, 360, 20)
GUISetState()
$Color = 0xFFff00
GUISetBkColor($Color)
ConsoleWrite("Color: 0x" & Hex($Color, 6) & @CRLF)
ConsoleWrite("Saturation: " & _Color_GetSaturation($Color) & " %" & @CRLF)
ConsoleWrite("Brightness: " & _Color_GetBrightness($Color) & " %" & @CRLF)
ConsoleWrite("Hue: " & _Color_GetHue($Color) & " º" & @CRLF)
Sleep(1000)
ConsoleWrite("Complementary color: " & _Color_FindComplementary($Color) & @CRLF & @CRLF)
$i = 0
While $i < 2
    $i += 1
    GUISetBkColor(_Color_FindComplementary($Color))
    Sleep(500)
    GUISetBkColor($Color)
    Sleep(500)
WEnd
GUISetBkColor(0)
For $x = 0 To 360 Step 2
    $Hue = _Color_SetHue($Color, $x)
    ConsoleWrite("Hue: " & $x & " º" & $Hue & @CRLF)
;~ GUISetBkColor($hue)
    GUICtrlSetGraphic($gra, $GUI_GR_COLOR, $Hue, $Hue)
    GUICtrlSetGraphic($gra, $GUI_GR_RECT, $x, 0, 2, 20)
    GUICtrlSetGraphic($gra, $GUI_GR_REFRESH)
    Sleep(30)

Next
Sleep(500)
GUISetBkColor($Color)
GUICtrlDelete($gra)
$gra = GUICtrlCreateGraphic(0, 0, 350, 20)
$gra2 = GUICtrlCreateGraphic(0, 20, 350, 20)


ConsoleWrite("  Saturation: Brightness:" & @CRLF)
For $x = 0 To 100
    $sat = _Color_SetSaturation($Color, $x)
    $brigth = _Color_SetBrightness($Color, $x)
    ConsoleWrite($x & " % " & $sat & "   " & $brigth & @CRLF)
    GUICtrlSetGraphic($gra, $GUI_GR_COLOR, $sat, $sat)
    GUICtrlSetGraphic($gra2, $GUI_GR_COLOR, $brigth, $brigth)
    GUICtrlSetGraphic($gra, $GUI_GR_RECT, 350 * $x / 100, 0, Ceiling(350 / 100), 20)
    GUICtrlSetGraphic($gra2, $GUI_GR_RECT, 350 * $x / 100, 0, Ceiling(350 / 100), 20)
    GUICtrlSetGraphic($gra, $GUI_GR_REFRESH)
    GUICtrlSetGraphic($gra2, $GUI_GR_REFRESH)
    Sleep(30)
Next

Func _Color_SetSaturation($iColor, $nPercent)
    Local $aColorArray[4]
    $nPercent = 1 - ($nPercent / 100)

    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)

    If $aColorArray[1] = $aColorArray[2] And $aColorArray[2] = $aColorArray[3] Then Return -1

    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)
    $IndexMid = 6 - ($IndexMax + $IndexMin)

    $aColorArray[$IndexMid] = ($aColorArray[$IndexMax] * ($aColorArray[$IndexMid] - $aColorArray[$IndexMin])) / ($aColorArray[$IndexMax] - $aColorArray[$IndexMin])
    $aColorArray[$IndexMid] = Round($aColorArray[$IndexMid] + ($aColorArray[$IndexMax] - $aColorArray[$IndexMid]) * $nPercent, 0)

    $aColorArray[$IndexMin] = Round($aColorArray[$IndexMax] * $nPercent, 0)
    Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2)
EndFunc ;==>_Color_SetSaturation

Func _Color_GetSaturation($iColor)
    Local $aColorArray[4]

    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)

    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)
    $IndexMid = 6 - ($IndexMax + $IndexMin)
    Return Round((1 - $aColorArray[$IndexMin] / $aColorArray[$IndexMax]) * 100, 0)
EndFunc ;==>_Color_GetSaturation

Func _Color_SetBrightness($iColor, $nPercent)
    Local $aColorArray[4]
    $nPercent = $nPercent / 100

    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)

    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    $ActBrightness = $aColorArray[$IndexMax] / 255
    For $i = 1 To 3
        $aColorArray[$i] = Round($aColorArray[$i] * $nPercent / $ActBrightness, 0)
    Next
    Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2)
EndFunc ;==>_Color_SetBrightness

Func _Color_GetBrightness($iColor)
    Local $aColorArray[4]

    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)

    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    Return Round(($aColorArray[$IndexMax] / 255) * 100, 0)
EndFunc ;==>_Color_GetBrightness

Func _Color_SetHue($iColor, $iHue)
    Local $aColorArray[4]

    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)

    $iMax = _ArrayMax($aColorArray, 1, 1)
    $iMin = _ArrayMin($aColorArray, 1, 1)

    If $iHue >= 61 And $iHue <= 180 Then
        $IndexMax = 2
        If $iHue < 120 Then
            $IndexMin = 3
            $iMid = (($iMax - $iMin) * (120 - $iHue)) / 60 + $iMin
        Else
            $IndexMin = 1
            $iMid = (($iMax - $iMin) * ($iHue - 120)) / 60 + $iMin
        EndIf
    ElseIf $iHue >= 181 And $iHue <= 299 Then
        $IndexMax = 3
        If $iHue <= 240 Then
            $IndexMin = 1
            $iMid = (($iMax - $iMin) * (240 - $iHue)) / 60 + $iMin
        Else
            $IndexMin = 2
            $iMid = (($iMax - $iMin) * ($iHue - 240)) / 60 + $iMin
        EndIf
    ElseIf $iHue >= 300 Or $iHue <= 60 Then
        $IndexMax = 1
        If $iHue <= 60 Then
            $IndexMin = 3
            $iMid = (($iMax - $iMin) * ($iHue)) / 60 + $iMin
        Else
            $IndexMin = 2
            $iMid = (($iMax - $iMin) * (360 - $iHue)) / 60 + $iMin
        EndIf
    EndIf
    $IndexMid = 6 - ($IndexMin + $IndexMax)
    $aColorArray[$IndexMin] = $iMin
    $aColorArray[$IndexMax] = $iMax
    $aColorArray[$IndexMid] = $iMid
    Return 0 & "x" & Hex($aColorArray[1], 2) & Hex($aColorArray[2], 2) & Hex($aColorArray[3], 2)
EndFunc ;==>_Color_SetHue

Func _Color_GetHue($iColor)
    Local $aColorArray[4], $Hue

    $aColorArray[1] = _ColorGetRed($iColor)
    $aColorArray[2] = _ColorGetGreen($iColor)
    $aColorArray[3] = _ColorGetBlue($iColor)

    $IndexMax = _ArrayMaxIndex($aColorArray, 1, 1)
    $IndexMin = _ArrayMinIndex($aColorArray, 1, 1)
    $IndexMid = 6 - ($IndexMax + $IndexMin)
    $Lambda = ($aColorArray[$IndexMid] - $aColorArray[$IndexMin]) * 60 / ($aColorArray[$IndexMax] - $aColorArray[$IndexMin])

    Switch $IndexMax
        Case 1
            Switch $IndexMin
                Case 2
                    $Hue = 360 - $Lambda
                Case 3
                    $Hue = $Lambda
            EndSwitch
        Case 2
            Switch $IndexMin
                Case 1
                    $Hue = 120 + $Lambda
                Case 3
                    $Hue = 120 - $Lambda
            EndSwitch
        Case 3
            Switch $IndexMin
                Case 1
                    $Hue = 240 - $Lambda
                Case 2
                    $Hue = 240 + $Lambda
            EndSwitch
    EndSwitch
    Return Round($Hue, 0)
EndFunc ;==>_Color_GetHue

Func _Color_FindComplementary($iColor)
    Local $iHue = Mod(_Color_GetHue($iColor) + 180, 360)
    Return _Color_SetHue($iColor, $iHue)
EndFunc ;==>_Color_FindComplementary

Last 'Done' (I Hope) edit ... yep. (all edit-code mode, no normal edit-mode involved.)

Edited by iEvKI3gv9Wrkd41u

"Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions."
"The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014)

"Believing what you know ain't so" ...

Knock Knock ...
 

Share this post


Link to post
Share on other sites

You can checkout or

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯

Share this post


Link to post
Share on other sites

Thanks guys. That image tool looks like it is exactly what will answer my question.

Share this post


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
Sign in to follow this  
Followers 0

  • Similar Content

    • Lasker
      A new image search solution
      By Lasker
      Hello,
      Im a new AutoIt user, im from Spain and i would like to share here my own image search detection method.
      What's about it?
      It's not perfect, but with it you don't need to use any DLL file. You don't need to distribute the image file with your final AU3 Script, or Exe if compiled. The image size does not affect to the detection speed. It's bug free (i believe).
      You can find here as an attach file, a distro package with all you need, and it includes a simple how-to guide.
      Im going to paste here the how-to guide:
      How to use this AutoIt image detector:
      Point 1:
      Install JRE (Java Runtime Environment), without this you can't execute Java Applications (.jar files). Open the Java tool named AISD with double click on it, or "java -jar aisd.jar" in the cmd. In AISD, open the image you want to detect in your script. Remember: the upper left pixel of the image, MUST be a not common color in the background if you want a fast detection. Then you will get a script file if you want, or only a clipboard copied version, full ready to paste into your main script because this one comes with extra help codes. Anyway, the generated code is the $sign definition of the image (calm down, point 3 explains what is the $sign and it's easy).
      Point 2:
      Paste the mentioned code in your main script, and try to follow the sample_usage script. If you know how to write au3 codes, it should be very easy. In general terms, all you need is to include image_search.au3, and then you can use the func image_search($sign, $width, $height). You need also the get_image_sign() function, that calculates the first parameter for image_search(). The get_image_sign() function is the one you have generated at point 1.
      Point 3:
      image_search() returns the center point of the target image. The func needs the $sign from the image, width and height. This $sign is the "footprint" of the image, in the form of an array of 9 integers. In most of the cases the $sign should be enough to identify the image, this is useful because using the $sign instead of the real image let you get a small script and a fast detection. You can also delete the image once you get the $sign. This $sign has always the same size (those 9 integers, it does not matter if the original image is small or big). How can you define the $sign for a certain image?, you don't need to generate the $sign, AISD does (point 1). Follow the sample_usage script and you will get it.
      Files in this distro package:
      * AISD.jar: The already explained Java app.
      * image_search.au3: The library or module with the resources that lets you detect images.
      * sample_usage.au3: The mentioned sample_usage script. It contains the smallest example, but i think it should be ok for learning purposes.
      * sample_usage.exe: The sample_usage.au3 script compiled (au3 -> .exe). You can execute this to see the image_search() func working.
      * sample_target.png: The image to be detected in the sample_usage. You can delete this file and the script will be fine.
      * OffsetCalc.jar: It's only a Java tool to calculate the offset to transform an XY point into another one. It's useful if you want to use apply_offset function (from image_search.au3). Both things are only necessary when it's hard to find a version of the target image with upper left pixel in the way mentioned. As you can imagine, the idea is to detect another image and then apply the offset to get the real coordinates of the original target image.
      Happy Detections
      Lasker image_search.zip
    • DrAhmed
      [Solved] Get stream size
      By DrAhmed
      Hey
      I was looking for methode to get the stream size of a picture from memory , wihtout need to write stream data to disk the then use filegetsize 
      Thats what I am trying to do
      #include <gdiplus.au3> #include <memory.au3> #include <staticconstants.au3> _GDIPlus_Startup() Global $ghGDIPDLL = $__g_hGDIPDll While 1 $data = Desk_Stream(50) $data2 = StringSplit($data, "|") $My_Stream_Size = $data2[0] $My_Stream = $data2[1] ;. ;.. ;... Sleep(1000) WEnd _GDIPlus_Shutdown() Func Desk_Stream($Q) Local $hHBmp = _ScreenCapture_Capture("") ;create a GDI bitmap by capturing my desktop Local $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBmp) ;convert GDI bitmap to GDI+ bitmap Local $hBitmap_Scaled = _GDIPlus_ImageResize($hBitmap, @DesktopWidth / 2, @DesktopHeight / 2) ;resize image $sStream_Data = _GDIPlus_StreamImage2BinaryString($hBitmap_Scaled, $sQ, False, '') ;coded by UEZ 2013 build 2014-01-25; based on the code ;release resources otherwise memory leak _WinAPI_DeleteObject($hHBmp) _GDIPlus_ImageDispose($hBitmap) _GDIPlus_ImageDispose($hBitmap_Scaled) Local $data_size = GetStreamSize($sStream_Data) Return $data_size & "|" & $sStream_Data EndFunc ;==>Desk_Stream Func _GDIPlus_StreamImage2BinaryString($hBitmap, $iQuality, $bSave, $sFilename) ;coded by UEZ 2013 build 2014-01-25; based on the code by Andreik Local $sImgCLSID, $tGUID, $tParams, $tData $sFormat = "JPG" $sImgCLSID = _GDIPlus_EncodersGetCLSID($sFormat) $tGUID = _WinAPI_GUIDFromString($sImgCLSID) $tData = DllStructCreate("int Quality") DllStructSetData($tData, "Quality", $iQuality) ;quality 0-100 Local $pData = DllStructGetPtr($tData) $tParams = _GDIPlus_ParamInit(1) _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData) Local $hStream = _WinAPI_CreateStreamOnHGlobal() ;http://msdn.microsoft.com/en-us/library/ms864401.aspx If @error Then Return SetError(2, 0, 0) _GDIPlus_ImageSaveToStream($hBitmap, $hStream, DllStructGetPtr($tGUID), DllStructGetPtr($tParams)) If @error Then Return SetError(3, 0, 0) Local $hMemory = _WinAPI_GetHGlobalFromStream($hStream) ;http://msdn.microsoft.com/en-us/library/aa911736.aspx If @error Then Return SetError(4, 0, 0) Local $iMemSize = _MemGlobalSize($hMemory) If Not $iMemSize Then Return SetError(5, 0, 0) Local $pMem = _MemGlobalLock($hMemory) $tData = DllStructCreate("byte[" & $iMemSize & "]", $pMem) Local $bData = DllStructGetData($tData, 1) _WinAPI_ReleaseStream($hStream) ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms221473(v=vs.85).aspx _MemGlobalFree($hMemory) Return $bData EndFunc ;==>_GDIPlus_StreamImage2BinaryString Func GetStreamSize($data) ; ?? EndFunc  
    • rootx
      Z-index image overlay, how to with Autoit? [SOLVED]
      By rootx
      Hi.. In html 5 4example I use Z-index on div object to overlay the images, how could I do this for example with the object pic and another object in the gui?
      How can I use the transparency of a PNG file?
      someone has already tried?
      THX.
    • UEZ
      GDI+ Color Transformer v0.9.7 build 2016-04-23
      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=n #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 = _GDIPlus11_Startup() If @error Then Switch @error Case 2 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 Case Else Exit MsgBox(16 + 262144, "Error", "Cannot initialize GDI+", 120) EndSwitch EndIf DllCall("Kernel32.dll", "long", "SetProcessDEPPolicy", "long", False) ;disable DEP for this process Global Const $GDIP_BLUREFFECT = "{633C80A4-1843-482b-9EF2-BE2834C5FDD4}" Global Const $GDIP_BRIGHTNESSCONTRASTEFFECT = "{D3A1DBE1-8EC4-4c17-9F4C-EA97AD1C343D}" Global Const $GDIP_COLORBALANCEEFFECT = "{537E597D-251E-48da-9664-29CA496B70F8}" Global Const $GDIP_COLORCURVEEFFECT = "{DD6A0022-58E4-4a67-9D9B-D48EB881A53D}" Global Const $GDIP_COLORLUTEFFECT = "{A7CE72A9-0F7F-40d7-B3CC-D0C02D5C3212}" Global Const $GDIP_COLORMATRIXEFFECT = "{718F2615-7933-40e3-A511-5F68FE14DD74}" Global Const $GDIP_HUESATURATIONLIGHTNESSEFFECT = "{8B2DD6C3-EB07-4d87-A5F0-7108E26A9C5F}" Global Const $GDIP_LEVELSEFFECT = "{99C354EC-2A31-4f3a-8C34-17A803B33A25}" Global Const $GDIP_REDEYECORRECTIONEFFECT = "{74D29D05-69A4-4266-9549-3CC52836B632}" Global Const $GDIP_SHARPENEFFECT = "{63CBF3EE-C526-402c-8F71-62C540BF5142}" Global Const $GDIP_TINTEFFECT = "{1077AF00-2848-4441-9489-44AD4C2D7A2C}" Global Const $tagCOLORLUTPARAMS = "byte ColorChannelLUTB[256];byte ColorChannelLUTG[256];byte ColorChannelLUTR[256];byte ColorChannelLUTA[256]" Global Const $tagBLURPARAMS = "float radius;bool expandEdge" ;0-255; False/True Global Const $tagBRIGHTNESSCONTRASTPARAMS = "int brightnessLevel;int contrastLevel" ;-255-255; -100-100 Global Const $tagCOLORBALANCEPARAMS = "int cyanRed;int magentaGreen;int yellowBlue" ;-100-100; -100-100; -100-100 Global Const $tagCOLORCURVEEFFECTPARAMS = "int type;int channel;int value" Global Const $tagGDIPCOLORMATRIXPARAMS = "float m[25];" Global Const $tagHUESATURATIONLIGHTNESSPARAMS = "int hueLevel;int saturationLevel;int lightnessLevel" ;-180-180; -100-100; -100-100 Global Const $tagLEVELSPARAMS = "int highlight;int midtone;int shadow" ;0-100; -100-100; 0-100 Global Const $tagSHARPENPARAMS = "float radius;float amount" ;0-255; 0-100 Global Const $tagTINTPARAMS = "int hue;int amount" ;-180-180; -100-100 Global Const $tagGDIPCOLORMATRIX = "float m[25];" ; [5][5] matrix; [0][0] - red, [1][1] - green, [2][2] - blue; [3][3] - alpha, [4][4] - ~should~ be 1 Global $tColorLUT = DllStructCreate($tagCOLORLUTPARAMS), $tColorColorChannelLUT Global $tRECTF = DllStructCreate($tagGDIPRECTF) DllStructSetData($tRECTF, "X", 0) DllStructSetData($tRECTF, "Y", 0) Global $tBlur = DllStructCreate($tagBLURPARAMS) Global $tBrightnessContrast = DllStructCreate($tagBRIGHTNESSCONTRASTPARAMS) Global $tColorBalance = DllStructCreate($tagCOLORBALANCEPARAMS) 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 $tColorCurve = DllStructCreate($tagCOLORCURVEEFFECTPARAMS), $iType = $iAdjustExposure, $iChannel = $iCurveChannelAll Global $tColorMatrix = DllStructCreate($tagGDIPCOLORMATRIXPARAMS) Global $tHueSaturationLightness = DllStructCreate($tagHUESATURATIONLIGHTNESSPARAMS) Global $tLevels = DllStructCreate($tagLEVELSPARAMS) Global $tSharpen = DllStructCreate($tagSHARPENPARAMS) Global $tTint = DllStructCreate($tagTINTPARAMS) 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_BMPFromMemory(_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_BMPFromMemory(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_BMPFromMemory(_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 $hIA = _GDIPlus_ImageAttributesCreate() Global $tGUID = DllStructCreate($tagGUID) Global $hImage = 0, $hBitmap_Apply = 0, $hBmp_Preview = 0, $hBmp_tmp = 0, $hBmp_Save = 0, $hBmp_Save_1bpp = 0, $hCtx_Apply, $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 _GDIPlus_ImageAttributesDispose($hIA) _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) If $hBitmap_Apply Then _GDIPlus_ImageDispose($hBitmap_Apply) _GDIPlus_ImageDispose($hCtx_Apply) EndIf 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, $hIA, GUICtrlRead($iInp_BWThreshold), False) Case 7 _GDIPlus_Greyscale($hImage, $hCtx_tmp, $hIA, False) EndSwitch _GDIPlus_BitmapDispose($hImage) $hBitmap_Apply = _GDIPlus_ImageClone($hBmp_tmp) $hImage = _GDIPlus_ImageClone($hBitmap_Apply) $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) $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", 0, "int", $GDIP_PXF32ARGB, "ptr", 0, "int*", 0) $hBmp_Empty = $aResult[6] $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($hBitmap_Apply) $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, $hIA, GUICtrlRead($iInp_BWThreshold), False) Case 1 ;Blur $hEffect = _GDIPlus_Blur($tBlur, GUICtrlRead($iInp_BlurRadius), BitAND(GUICtrlRead($iCheckbox_BlurExpandEdge), $GUI_CHECKED)) Case 2 ;Brightness / Contrast $hEffect = _GDIPlus_BrightnessContrast($tBrightnessContrast, GUICtrlRead($iInp_BCBrightness), GUICtrlRead($iInp_BCContrast)) Case 3 ;Color Balance $hEffect = _GDIPlus_ColorBalance($tColorBalance, GUICtrlRead($iInp_CBCyanRed), GUICtrlRead($iInp_CBMagentaGreen), GUICtrlRead($iInp_CBYellowBlue)) Case 4 ;Color Curve $hEffect = _GDIPlus_ColorCurve($tColorCurve, $iType, $iChannel, GUICtrlRead($iInp_CCValue)) Case 5 ;Color LUT Case 6 ;Color Matrix $hEffect = _GDIPlus_ColorMatrix($tColorMatrix, GUICtrlRead($iInp_CMRed), GUICtrlRead($iInp_CMGreen), GUICtrlRead($iInp_CMBlue), 1) Case 7 ;Greyscale _GDIPlus_Greyscale($hImage, $hCtx_tmp, $hIA, False) Case 8 ;Hue / Saturation / Lightness $hEffect = _GDIPlus_HueSaturationLightness($tHueSaturationLightness, GUICtrlRead($iInp_HSLHueLevel), GUICtrlRead($iInp_HSLSatLevel), GUICtrlRead($iInp_HSLLightnLevel)) Case 9 ;Levels $hEffect = _GDIPlus_Levels($tLevels, GUICtrlRead($iInp_LevelsHighlight), GUICtrlRead($iInp_LevelsMidtone), GUICtrlRead($iInp_LevelsShadow)) Case 10;Negative _GDIPlus_Negative($hImage, $hCtx_tmp, $hIA) Case 11;Sharpen $hEffect = _GDIPlus_Sharpen($tSharpen, GUICtrlRead($iInp_SharpenRadius), GUICtrlRead($iInp_SharpenAmount)) Case 12;Tint $hEffect = _GDIPlus_Tint($tTint, GUICtrlRead($iInp_TintHue), GUICtrlRead($iInp_TintAmount)) EndSwitch If $iTabSelection <> 0 And $iTabSelection <> 7 Then _GDIPlus_DrawImageFX($hCtx_tmp, $hImage, $tRECTF, $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) Switch $iTabSelection Case 0 ;Black & White DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hGraphic, "int", 5) _GDIPlus_BlackAndWhite($hImage, $hGraphic, $hIA, GUICtrlRead($iInp_BWThreshold)) $bDrawFX = False Case 1 ;Blur $hEffect = _GDIPlus_Blur($tBlur, GUICtrlRead($iInp_BlurRadius), BitAND(GUICtrlRead($iCheckbox_BlurExpandEdge), $GUI_CHECKED)) $bDrawFX = True Case 2 ;Brightness / Contrast $hEffect = _GDIPlus_BrightnessContrast($tBrightnessContrast, GUICtrlRead($iInp_BCBrightness), GUICtrlRead($iInp_BCContrast)) $bDrawFX = True Case 3 ;Color Balance $hEffect = _GDIPlus_ColorBalance($tColorBalance, GUICtrlRead($iInp_CBCyanRed), GUICtrlRead($iInp_CBMagentaGreen), GUICtrlRead($iInp_CBYellowBlue)) $bDrawFX = True Case 4 ;Color Curve $hEffect = _GDIPlus_ColorCurve($tColorCurve, $iType, $iChannel, GUICtrlRead($iInp_CCValue)) $bDrawFX = True Case 5 ;Color LUT $bDrawFX = False Case 6 ;Color Matrix $hEffect = _GDIPlus_ColorMatrix($tColorMatrix, GUICtrlRead($iInp_CMRed), GUICtrlRead($iInp_CMGreen), GUICtrlRead($iInp_CMBlue), 1) $bDrawFX = True Case 7 ;Greyscale _GDIPlus_Greyscale($hImage, $hGraphic, $hIA) $bDrawFX = False Case 8 ;Hue / Saturation / Lightness $hEffect = _GDIPlus_HueSaturationLightness($tHueSaturationLightness, GUICtrlRead($iInp_HSLHueLevel), GUICtrlRead($iInp_HSLSatLevel), GUICtrlRead($iInp_HSLLightnLevel)) $bDrawFX = True Case 9 ;Levels $hEffect = _GDIPlus_Levels($tLevels, GUICtrlRead($iInp_LevelsHighlight), GUICtrlRead($iInp_LevelsMidtone), GUICtrlRead($iInp_LevelsShadow)) $bDrawFX = True Case 10;Negative _GDIPlus_Negative($hImage, $hGraphic, $hIA) $bDrawFX = False Case 11;Sharpen $hEffect = _GDIPlus_Sharpen($tSharpen, GUICtrlRead($iInp_SharpenRadius), GUICtrlRead($iInp_SharpenAmount)) $bDrawFX = True Case 12;Tint $hEffect = _GDIPlus_Tint($tTint, GUICtrlRead($iInp_TintHue), GUICtrlRead($iInp_TintAmount)) $bDrawFX = True EndSwitch If $bDrawFX Then If $hBitmap_Apply Then _GDIPlus_ImageDispose($hBitmap_Apply) _GDIPlus_ImageDispose($hCtx_Apply) EndIf $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0) $hBitmap_Apply = $aResult[6] $hCtx_Apply = _GDIPlus_ImageGetGraphicsContext($hBitmap_Apply) _GDIPlus_GraphicsClear($hCtx_tmp, 0xFF000000 + $iBGColor) _GDIPlus_DrawImageFX($hCtx_tmp, $hImage, $tRECTF, $hEffect) _GDIPlus_DrawImageFX($hCtx_Apply, $hImage, $tRECTF, $hEffect) _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 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, $hGraphics, $hIA, $iThreshold, $bUpdate = True) Local $tBWMatrix, $pBWMatrix _GDIPlus_ImageAttributesSetThreshold($hIA, 0, True, $iThreshold) $tBWMatrix = _GDIPlus_ColorMatrixCreateGrayScale() $pBWMatrix = DllStructGetPtr($tBWMatrix) _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $pBWMatrix) Local $iW = _GDIPlus_ImageGetWidth($hBitmap), $iH = _GDIPlus_ImageGetHeight($hBitmap) If $bUpdate Then CopyImage2Gfx($hBitmap, $hGraphics, $hDC, $hDC_backbuffer, $iW, $iH, $hIA) Else _GDIPlus_GraphicsClear($hGraphics, 0xFF000000 + $iBGColor) _GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, $iW, $iH, 0, 0, $iW, $iH, $hIA) EndIf _GDIPlus_ImageAttributesSetThreshold($hIA, 0, False) EndFunc ;==>_GDIPlus_BlackAndWhite Func _GDIPlus_Blur($tBlur, $fRadius, $bExpandEdge = False) If Not IsDllStruct($tBlur) Then Return SetError(1, @error, 0) DllStructSetData($tBlur, "radius", $fRadius) DllStructSetData($tBlur, "expandEdge", $bExpandEdge) Local $pEffect = _GDIPlus_EffectCreate($GDIP_BLUREFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tBlur) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_Blur Func _GDIPlus_BrightnessContrast($tBrightnessContrast, $iBrightnessLevel, $iContrastLevel) If Not IsDllStruct($tBrightnessContrast) Then Return SetError(1, @error, 0) DllStructSetData($tBrightnessContrast, "brightnessLevel", $iBrightnessLevel) DllStructSetData($tBrightnessContrast, "contrastLevel", $iContrastLevel) Local $pEffect = _GDIPlus_EffectCreate($GDIP_BRIGHTNESSCONTRASTEFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tBrightnessContrast) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_BrightnessContrast Func _GDIPlus_ColorBalance($tColorBalance, $iCyanRed, $iMagentaGreen, $iYellowBlue) If Not IsDllStruct($tColorBalance) Then Return SetError(1, @error, 0) DllStructSetData($tColorBalance, "cyanRed", $iCyanRed) DllStructSetData($tColorBalance, "magentaGreen", $iMagentaGreen) DllStructSetData($tColorBalance, "yellowBlue", $iYellowBlue) Local $pEffect = _GDIPlus_EffectCreate($GDIP_COLORBALANCEEFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tColorBalance) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_ColorBalance Func _GDIPlus_ColorCurve($tColorCurve, $iType, $iChannel, $iValue) If Not IsDllStruct($tColorCurve) Then Return SetError(1, @error, 0) DllStructSetData($tColorCurve, "type", $iType) DllStructSetData($tColorCurve, "channel", $iChannel) DllStructSetData($tColorCurve, "value", $iValue) Local $pEffect = _GDIPlus_EffectCreate($GDIP_COLORCURVEEFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tColorCurve) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_ColorCurve Func _GDIPlus_ColorMatrix($tColorMatrix, $fRed, $fGreen, $fBlue, $fAlpha) If Not IsDllStruct($tColorMatrix) Then Return SetError(1, @error, 0) DllStructSetData($tColorMatrix, "m", $fRed, 1) DllStructSetData($tColorMatrix, "m", $fGreen, 7) DllStructSetData($tColorMatrix, "m", $fBlue, 13) DllStructSetData($tColorMatrix, "m", $fAlpha, 19) DllStructSetData($tColorMatrix, "m", 1, 25) ;the element in the fifth row and fifth column of a 5×5 homogeneous matrix must be 1, and all of the other elements in the fifth column must be 0 Local $pEffect = _GDIPlus_EffectCreate($GDIP_COLORMATRIXEFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tColorMatrix) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_ColorMatrix Func _GDIPlus_Greyscale($hBitmap, $hGraphic, $hIA, $bUpdate = True) Local $tGreyscaleMatrix = _GDIPlus_ColorMatrixCreateGrayScale() Local $pGreyscaleMatrix = DllStructGetPtr($tGreyscaleMatrix) _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $pGreyscaleMatrix) 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_GraphicsDrawImageRectRectIA($hGraphic, $hBitmap, 0, 0, $iW, $iH, 0, 0, $iW, $iH, $hIA) EndIf _GDIPlus_ImageAttributesSetThreshold($hIA, 0, False) EndFunc ;==>_GDIPlus_Greyscale Func _GDIPlus_HueSaturationLightness($tHueSaturationLightness, $iHueLevel, $iSaturationLevel, $iLightnessLevel) If Not IsDllStruct($tHueSaturationLightness) Then Return SetError(1, @error, 0) DllStructSetData($tHueSaturationLightness, "hueLevel", $iHueLevel) DllStructSetData($tHueSaturationLightness, "saturationLevel", $iSaturationLevel) DllStructSetData($tHueSaturationLightness, "lightnessLevel", $iLightnessLevel) Local $pEffect = _GDIPlus_EffectCreate($GDIP_HUESATURATIONLIGHTNESSEFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tHueSaturationLightness) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_HueSaturationLightness Func _GDIPlus_Levels($tLevels, $iHighlight, $iMidtone, $iShadow) If Not IsDllStruct($tLevels) Then Return SetError(1, @error, 0) DllStructSetData($tLevels, "highlight", $iHighlight) DllStructSetData($tLevels, "midtone", $iMidtone) DllStructSetData($tLevels, "shadow", $iShadow) Local $pEffect = _GDIPlus_EffectCreate($GDIP_LEVELSEFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tLevels) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_Levels Func _GDIPlus_Negative($hBitmap, $hGraphic, $hIA) Local $tNegMatrix = _GDIPlus_ColorMatrixCreateNegative() Local $pNegMatrix = DllStructGetPtr($tNegMatrix) _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $pNegMatrix) CopyImage2Gfx($hBitmap, $hGraphic, $hDC, $hDC_backbuffer, _GDIPlus_ImageGetWidth($hBitmap), _GDIPlus_ImageGetHeight($hBitmap), $hIA) _GDIPlus_ImageAttributesSetThreshold($hIA, 0, False) EndFunc ;==>_GDIPlus_Negative Func _GDIPlus_Sharpen($tSharpen, $fRadius, $fAmount) If Not IsDllStruct($tSharpen) Then Return SetError(1, @error, 0) DllStructSetData($tSharpen, "radius", $fRadius) DllStructSetData($tSharpen, "amount", $fAmount) Local $pEffect = _GDIPlus_EffectCreate($GDIP_SHARPENEFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tSharpen) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_Sharpen Func _GDIPlus_Tint($tTint, $iHue, $iAmount) If Not IsDllStruct($tTint) Then Return SetError(1, @error, 0) DllStructSetData($tTint, "hue", $iHue) DllStructSetData($tTint, "amount", $iAmount) Local $pEffect = _GDIPlus_EffectCreate($GDIP_TINTEFFECT) If @error Then Return SetError(2, @error, 0) _GDIPlus_EffectsSetParameters($pEffect, $tTint) If @error Then Return SetError(3, @error, 0) Return $pEffect EndFunc ;==>_GDIPlus_Tint #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 _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 _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 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 _GDIPlus_ImageClone($hImage) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCloneImage", "handle", $hImage, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[2] EndFunc ;==>_GDIPlus_ImageClone Func _GDIPlus_ImageAttributesCreate() Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateImageAttributes", "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[1] EndFunc ;==>_GDIPlus_ImageAttributesCreate Func _GDIPlus_ImageAttributesSetThreshold($hImageAttributes, $iColorAdjustType = 0, $fEnable = False, $nThershold = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetImageAttributesThreshold", "handle", $hImageAttributes, "int", $iColorAdjustType, "int", $fEnable, "float", $nThershold) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_ImageAttributesSetThreshold Func _GDIPlus_ImageAttributesDispose($hImageAttributes) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDisposeImageAttributes", "handle", $hImageAttributes) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_ImageAttributesDispose Func _GDIPlus_ImageAttributesSetColorMatrix($hImageAttributes, $iColorAdjustType = 0, $fEnable = False, $pClrMatrix = 0, $pGrayMatrix = 0, $iColorMatrixFlags = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetImageAttributesColorMatrix", "handle", $hImageAttributes, "int", $iColorAdjustType, "int", $fEnable, "ptr", $pClrMatrix, "ptr", $pGrayMatrix, "int", $iColorMatrixFlags) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_ImageAttributesSetColorMatrix Func _GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hImage, $nSrcX, $nSrcY, $nSrcWidth, $nSrcHeight, $nDstX, $nDstY, $nDstWidth, $nDstHeight, $hImageAttributes = 0, $iUnit = 2) Local $aResult = DllCall($ghGDIPDll, "int", "GdipDrawImageRectRect", "handle", $hGraphics, "handle", $hImage, "float", $nDstX, "float", _ $nDstY, "float", $nDstWidth, "float", $nDstHeight, "float", $nSrcX, "float", $nSrcY, "float", $nSrcWidth, "float", _ $nSrcHeight, "int", $iUnit, "handle", $hImageAttributes, "int", 0, "int", 0) If @error Then Return SetError(@error, @extended, False) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsDrawImageRectRectIA Func _GDIPlus_ColorMatrixCreateGrayScale() Local $iI, $iJ, $tCM, $aLums[4] = [$GDIP_RLUM, $GDIP_GLUM, $GDIP_BLUM, 0] $tCM = DllStructCreate($tagGDIPCOLORMATRIX) For $iI = 0 To 3 For $iJ = 1 To 3 DllStructSetData($tCM, "m", $aLums[$iI], $iI * 5 + $iJ) Next Next DllStructSetData($tCM, "m", 1, 19) DllStructSetData($tCM, "m", 1, 25) Return $tCM EndFunc ;==>_GDIPlus_ColorMatrixCreateGrayScale Func _GDIPlus_ColorMatrixCreateNegative() Local $iI, $tCM $tCM = _GDIPlus_ColorMatrixCreateScale(-1, -1, -1, 1) For $iI = 1 To 4 DllStructSetData($tCM, "m", 1, 20 + $iI) Next Return $tCM EndFunc ;==>_GDIPlus_ColorMatrixCreateNegative Func _GDIPlus_ColorMatrixCreateScale($nRed, $nGreen, $nBlue, $nAlpha = 1) Local $tCM $tCM = DllStructCreate($tagGDIPCOLORMATRIX) DllStructSetData($tCM, "m", $nRed, 1) DllStructSetData($tCM, "m", $nGreen, 7) DllStructSetData($tCM, "m", $nBlue, 13) DllStructSetData($tCM, "m", $nAlpha, 19) DllStructSetData($tCM, "m", 1, 25) Return $tCM EndFunc ;==>_GDIPlus_ColorMatrixCreateScale Func _GDIPlus_EffectCreate($sEffectGUID, $pEffect = 0) Local $iI, $tGUID, $pGUID, $tElem, $aElem[4], $aResult $tGUID = _WinAPI_GUIDFromString($sEffectGUID) $pGUID = DllStructGetPtr($tGUID) $tElem = DllStructCreate("uint[4]", $pGUID) For $iI = 1 To 4 $aElem[$iI - 1] = DllStructGetData($tElem, 1, $iI) Next $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateEffect", "uint", $aElem[0], "uint", $aElem[1], "uint", $aElem[2], "uint", $aElem[3], "uint*", $pEffect) If @error Then Return SetError(@error, @extended, 0) Return SetError($aResult[0], 0, $aResult[5]) EndFunc ;==>_GDIPlus_EffectCreate Func _GDIPlus_EffectsSetParameters($pEffectObject, $tEffectParameters, $iSizeAdj = 1) Local $aSize = DllCall($ghGDIPDll, "uint", "GdipGetEffectParameterSize", "ptr", $pEffectObject, "uint*", 0) Local $iSize = $aSize[2] * $iSizeAdj Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetEffectParameters", "ptr", $pEffectObject, "struct*", $tEffectParameters, "uint", $iSize) If @error Then Return SetError(@error, @extended, 0) Return SetError($aResult[0], 0, $aResult[3]) EndFunc ;==>_GDIPlus_EffectsSetParameters Func _GDIPlus_EffectDispose($pEffect) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteEffect", "ptr", $pEffect) If @error Then Return SetError(@error, @extended, 0) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_GDIPlus_EffectDispose Func _GDIPlus_DrawImageFX($hGraphics, $hBitmap, $tRECTF, $pEffect, $hMatrix = 0, $pImgAttributes = 0, $iUnit = 2) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDrawImageFX", _ "handle", $hGraphics, _ "handle", $hBitmap, _ "struct*", $tRECTF, _ "handle", $hMatrix, _ "ptr", $pEffect, _ "ptr", $pImgAttributes, _ "uint", $iUnit) If @error Then Return SetError(@error, @extended, 0) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_GDIPlus_DrawImageFX 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_GraphicsDrawImageRectRectIA($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 _GDIPlus11_Startup() ;code by Authenticity - modified by UEZ Local $tInput, $tToken, $aResult, $sGDIPDLL, $sVer $giGDIPRef += 1 If $giGDIPRef > 1 Then Return True $sGDIPDLL = @ScriptDir & "\gdiplus.dll" If FileExists($sGDIPDLL) And @OSBuild < 6000 Then $sVer = FileGetVersion($sGDIPDLL) If $sVer < "6.0" Then Return SetError(10, 0, 0) ;For XP you need a GDIPlus.dll v1.1 in the script directory, refer to: http://www.winsxs.org/?OtherTech/thread-13-1-1 Else Switch @OSBuild Case 0 To 2599 Return SetError(1, 0, 0) Case 2600 To 4999 Return SetError(2, 0, 0) Case 5000 To 7599 $sGDIPDLL = @WindowsDir & "\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.6000.16386_none_8df21b8362744ace\gdiplus.dll" Case Else $sGDIPDLL = @SystemDir & "\gdiplus.dll" EndSwitch EndIf $ghGDIPDll = DllOpen($sGDIPDLL) If @error Then Return SetError(3, 0, 0) $tInput = DllStructCreate($tagGDIPSTARTUPINPUT) $tToken = DllStructCreate("int Data") DllStructSetData($tInput, "Version", 1) $aResult = DllCall($ghGDIPDll, "int", "GdiplusStartup", "struct*", $tToken, "struct*", $tInput, "ptr", 0) If @error Then Return SetError(4, @extended, 0) $giGDIPToken = DllStructGetData($tToken, "Data") Return $aResult[0] = 0 EndFunc ;==>_GDIPlus11_Startup 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 Func _GDIPlus_BMPFromMemory($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 = _WinAPI_BitmapCreateDIBFromBitmap($hBitmap) _GDIPlus_BitmapDispose($hBitmap) Return $hHBmp EndIf Return $hBitmap EndFunc ;==>_GDIPlus_BMPFromMemory Func _WinAPI_BitmapCreateDIBFromBitmap($hBitmap) ;create 32-bit bitmap v5 (alpha channel supported) Local $tBIHDR, $aRet, $tData, $pBits, $hResult = 0 $aRet = DllCall($ghGDIPDll, 'uint', 'GdipGetImageDimension', 'ptr', $hBitmap, 'float*', 0, 'float*', 0) If (@error) Or ($aRet[0]) Then Return 0 $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $aRet[2], $aRet[3], $GDIP_ILMREAD, $GDIP_PXF32ARGB) $pBits = DllStructGetData($tData, 'Scan0') If Not $pBits Then Return 0 $tBIHDR = DllStructCreate('dword bV5Size;long bV5Width;long bV5Height;word bV5Planes;word bV5BitCount;dword bV5Compression;' & _ ;http://msdn.microsoft.com/en-us/library/windows/desktop/dd183381(v=vs.85).aspx 'dword bV5SizeImage;long bV5XPelsPerMeter;long bV5YPelsPerMeter;dword bV5ClrUsed;dword bV5ClrImportant;' & _ 'dword bV5RedMask;dword bV5GreenMask;dword bV5BlueMask;dword bV5AlphaMask;dword bV5CSType;' & _ 'int bV5Endpoints[3];dword bV5GammaRed;dword bV5GammaGreen;dword bV5GammaBlue;dword bV5Intent;' & _ 'dword bV5ProfileData;dword bV5ProfileSize;dword bV5Reserved') DllStructSetData($tBIHDR, 'bV5Size', DllStructGetSize($tBIHDR)) DllStructSetData($tBIHDR, 'bV5Width', $aRet[2]) DllStructSetData($tBIHDR, 'bV5Height', $aRet[3]) DllStructSetData($tBIHDR, 'bV5Planes', 1) DllStructSetData($tBIHDR, 'bV5BitCount', 32) DllStructSetData($tBIHDR, 'bV5Compression', 0) ; $BI_BITFIELDS = 3, $BI_RGB = 0, $BI_RLE8 = 1, $BI_RLE4 = 2, $RGBA = 0x41424752 DllStructSetData($tBIHDR, 'bV5SizeImage', $aRet[3] * DllStructGetData($tData, 'Stride')) DllStructSetData($tBIHDR, 'bV5AlphaMask', 0xFF000000) DllStructSetData($tBIHDR, 'bV5RedMask', 0x00FF0000) DllStructSetData($tBIHDR, 'bV5GreenMask', 0x0000FF00) DllStructSetData($tBIHDR, 'bV5BlueMask', 0x000000FF) DllStructSetData($tBIHDR, 'bV5CSType', 2) ; LCS_WINDOWS_COLOR_SPACE = 2 DllStructSetData($tBIHDR, 'bV5Intent', 4) ; $LCS_GM_IMA $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', $aRet[2] * $aRet[3] * 4, 'ptr', DllStructGetData($tData, 'Scan0')) $hResult = $hResult[0] Else $hResult = 0 EndIf _GDIPlus_BitmapUnlockBits($hBitmap, $tData) $tData = 0 $tBIHDR = 0 Return $hResult EndFunc ;==>_WinAPI_BitmapCreateDIBFromBitmap ;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 &= '5sshARx4Y8y05fZl+X2yl18uX7syD4ZOrA9tbG+MstBnRaArE44fmpFHSVKjGqG6RqtfE15VaOHjwgP4RVkW6tnIR3kRx8Zibho1wduDAx/8W7eMg2inbq5jo7YsXxJdbhKTsgO/Mzcsi38tOHc5W3HhlgfDe+TIwdq3i5dbvZgQrIDrTp3+14bfJszU+Oo1TdpaLbZna393c+BSd3LfDXkPHmvyBW4qI9KcfBqloWSlO+7yDesyDDS0roZlCLHWqghU7k7QoaTex0Ye1k8dIkg2Y2Xd3ijdsaPSqLhRcob0HelJnyDD5NexQ7S6WQrLnkZIGJ5lEHS4LIgMWrV76nXxtGyC40fBRbV3EQPNo5Gu/LIlVXFNEsA6Ux+KlPJVg/T7RTijpN75K2/imT8KUBXBY+ySrYE/hSWXqltUogyOqdAwrcG9CQ2r+LHbXRyIVzvp3yEl9PsFeFK/EOKx5aQSDd4Awhq1alV7avpGZVm4ZnHa6RcpJrZS5AqbHwm/VGAOOadywVpRFgJikIDc8oFvDek47R6/JTxE60mlfgnDkLapY4VUbC8Zeka0Lp5KSx1ElacG9Jsi463LIjq3p3ow8ZaiW5X7K7rGU3qUpN4ysdDHHeViPwatyaeInXfhfZRje5djcsWel4p08lWD9PtFOKOk36DxUw7U6u0XFAK/0Civ9P0V/p+ig4amCZYaavCdyxLHtJS7IDw6s12Vu0qmMFWiMGlGGvR2Uh7XQURaUY69HinEmGmb3OyKHayGKHaaUrNRRIM4pwnt2m563PljvvuCj4ce04GXbsoi0mitKUV0lGGkzJ2Uh7TgZMBRFpcU8U40w0zfoTVz4xg5fTbN+FaVfHGukE3q8drpJoaTN6OykPacC7dl27LoMmCmguK4Jo+k47VzHmLYBRhUHejxtTZ3RjhqodQ2SIEGlIfi7i42Xxb2myo217HipB2u3ZMBNDS0nhtdJNDXq7J4JhriniumminZZGi9wVXHduaMU8VIO09dl27KItLgukmGmb9LS4rgumumumngsyGwSm0L/R+i9VV8YIEYVWZRBpMNa9uv1nZTFtErbVnChLN6d4K/NtIZyxWHqTDXg2vTS0iFGFv0GKNza/WksrCXZQhdtgp4sVWIg6UW/S0tLS0te7SeKnBX6Vwl6VG6ZVMQGu4gaUYaWk8E0Eze7S1+w4rj7NLS1+1lDa6KYKYa4rX7d4pxJwMu2ZNXUB6TN6k5cJnsZKGFsGsUPc78WgeVixhS2LNT9aUNrpJhpm/buyce10kw0zf7zr97paWvc2MqtdyN16IMdkw5IXstWxUhAL1gmwtI7s2m/X1/zzNULD2MDjYEDayA6pKl4N6HplqwSU8XStWB/wDw5maKCSyG9/D0mlZ9CCgaHx/0N//EADsRAAEDAgIGBwcCBgMBAAAAAAEAAgMEERIhECIxQVHwEzJhgZGxwQUUIHGh0eEwQjNAQ1Bw8SNSYHL/2gAIAQMBAT8B/wARAX/mA1ztg+AC62f2SGmdJrHIJkEX7W3+fNkIWnOw8AjDGcm28Ah0bqk4Rl9gnPhY7Cdv/wAhBrJdgDvlkfTyT6UOzi8N/wCdNPK7DGb7PTPSQWmx0gXUVO1m0Xd9Bz4JswGXSDn6KQgts7MePPcqpkLMm7fpz4/BFAZRe9gp2xxxNDPH9GmAiYLnM5/ZEtky2/VGCO/U8/ugIgOqPBTVDqduocz9P1oqdtgX79y6CI6uDz9VK1rXkNNx/KU8QkdrbApJAwY3dw53KSaSXrFNcWm4TawkHHt4qn/d8vUKo/inRBMZjgft3FVLBI3pN+/RDlCT8/K3rojwtYHRi1/FVJvM7nZppWW195yH3U02LUb1RzfRDUGPVObVI8yPLjvUVM6QYjkF7lHxKngMPaFTOsHBVR18PDnzTI3SOwtTaNu8p9ELahzTWOebNXusmKydBExhc52npZP+xTXyPcG4jmqqZ2Vjtueed6E8w2OPinyvk6xXu8mH' $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 &= 'z2B7XC/6loDKoDLFCBuXDh6xLY74dkQO5Aj9We0ZFFdQgcC9WOwmmaIspbxPdQ+mCvfEwJo/ipUpWRrOuhMFMLTqC8eGByCk0SbBRLWF1Op+u/gdhzPoN/JmKXssnJ2hf1GyNafa2uFpi5mPTAy8e5fWYfuvnU7ILlcAwKXQ1YjY+qnq4n5peTFhYvmUfxZmTof7Ys/fdZpTR4aIcpmup98W1ANwrtE7c/beKgnqWD5M0iiXtmYlayxauMY8yI9n/bMn+qGYAoHgKhebjbf5JTKj5a1eeZyCUHLxNah0PVjGyjzeZaNIb9StpX2sHGZyldMlgrG+TebYQQK/c8Nu6qXzP1sUhDJFxxQc2quvPwa+ugXKvoLerDUumHLLhFsbHaDK5Ln0UhFr6RUup3E84UOFKLVvmZ1X7czU4tU095pqVbjKv0BmVBsGNaLizEeJ7KH8I4KfIWI2YA7TPhx3fM15Hl+YD2LYNKhUtkLxU26zUvJ/SFiVy5nyWwUWLaPckKh/lza7s1s25+re7NWTaqraQSexHCj9RKDjU16Dm0F8zHd4rfdRqn6wSMmmL/1HfeUeLDlCDKrD0JWVeM3OxR9Z8YdJjijKjygc2h835Ulf1yYPYJ/xgSZk2t3pNS6+rDjTDBCCDmO1vAN5l56O8soM9bEKFElud+go8opklYRsEUe69j4Ae7GZpT5pmLlBl7HsA+pKZY4v1WY0byGwDAbuIgWVChx2I7k7IP26wZsA4whGu/qlAmiaIMpiPCo1Cj8IRmvar9XtD1AsTclpB8ViPKVWzG5VcUwtgotmQ7yll5CvDr9f+x1z/sM0hAWe6qWNE1ZWDXJ6Jmqa1AXlv4bWZoJi/Xn+ogXb2yXUao9TKbsvv/SFRiCSiB/HRKFBlNf60TBP13FhNHhojymI4Par7nXz2sfUCjEqJbRSrqBu4lblqe/r9sWmc7H8EsQujb5gxrWQra5qetPCew/CHC0fdCBiAaZpOiXpX3BCchR7H3G0Vgp1qzBHrTJCaOU2W4YQI4Ck6NerX3Ciw1bZsfqBRAqUQJAm1IFwsLRhf6zJ25noTx0lR4ToXQ9ka6QzYA9Yqg0CcwAzeo+GU75evN9wqMQSUxXQAz6TOOk7VXHdYVKN05F29q53gO/IxH/dpeMPDcXPcUU+gA4DXfahpB7NrHXpEfVUbrB6i04plFvuTZWE39hNrx9ypDdLWKNqiAZpWHX+lNSztxr9WhFpa14T1NPSHj/hEDuxNMTPdoP06zGulGQVGIJKIH8LCWAGByRcrI/Zz7hjQCaVotPavIgs3tFjCTWDWsQUJDKrVWHHvK6ZnTNGkJ2joYdANp3Kj0l/lJhb8yhWTNLclfctmP32tV8iY8rBQGjBo0MVGt8C5hGtwalQ1hBrOr1bz/8Aogr+CiugNhsSjxPs9AOUy9cSsl5NXhLGvXzNejG845IdCPtcuE3gx6RXpG3GLEIDK/0W/wBSa3FxChiMWw6oeEIy9TYhr8Vg+mUegI0dEyXFbHH2PhUFDMJNZWJgSyiXAG01lo9H0wyCu5u94g9edjIcLUneHTMO4dqoCFctC4RwA5S+ZCTM2rprp0NPLwC4Br1Gd9PVlhLmWlTp1eCHr84bxeaN02D7Ner4aPrD3QGh/Xocsv7tK1j2ejyMU4GR5z6ypU9ov+vp5xIoFoa0w0Icfz0ypS/V7QPM5zUZYajHTvFojx4PEqGNXDtA4Hs/WK2a/ofQTQmmUKLtW2t9PZCMFYbRQaEORb+iPS80V2DI5XPYvXdgwhlYYDAw0P3LCGGvL6CURqQw9Gd1Pwg6argA++bZGd51SbB2SFXyRj9QYCrLQVjh/TaWDQLqF9En3LJfSC9gcvr115fkzAhxBiXR+VKmnHgVjAeow3ABWlMPmSecbrWaPxBKOqLbSyXdvFmEHSqjrGPsXaEkt/uPUPxPSPkK3cAzSlYjygFrPpr3ZQZytpakhshiitSx/YX2i4NVPphbIZvCvzB8' $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
    • trucu
      Saving a Shockwave.flash as an Image?
      By trucu
      Hi will like to know if there a way for me to save any shockwave.flash as an image of the actual frame. My problem is I have a chart that is made with shockwave.flash using xml file but I want to print it out in a PDF but I can paste an image but I dont know how to do it.
       
      Can anyone help?