Jump to content

Recommended Posts

Posted (edited)

I'm trying to understand following code which I want to convert to Autoit:

RedEyeCorrection

VOID Example_RedEyeSetParameters(HDC hdc)
{
   Graphics graphics(hdc);
   Image myImage(L"RedEyePhoto.jpg");

   REAL srcWidth = (REAL)myImage.GetWidth();
   REAL srcHeight = (REAL)myImage.GetHeight();
   RectF srcRect(0.0f, 0.0f, srcWidth, srcHeight);
   Matrix myMatrix(1.0f, 0.0f, 0.0f, 1.0f, 300.0f, 20.0f);

   RECT redAreas[2] = {40, 10, 55, 30, 110, 20, 125, 40};

   RedEyeCorrectionParams myRedEyeCorParams;
   myRedEyeCorParams.numberOfAreas = 2;
   myRedEyeCorParams.areas = redAreas;

   RedEyeCorrection myRedEyeCor;
   myRedEyeCor.SetParameters(&myRedEyeCorParams);

   // Draw the image with no change.
   graphics.DrawImage(&myImage, 20.0, 20.0, srcWidth, srcHeight);

   // Draw the image with the red eye correction.
   graphics.DrawImage(&myImage, &srcRect, &myMatrix, &myRedEyeCor, NULL, UnitPixel);
}

I made something like this here

Global $tRECT1 = DllStructCreate("long left;long top;long right;long buttom")
DllStructSetData($tRECT1, "left", 55)
DllStructSetData($tRECT1, "top", 69)
DllStructSetData($tRECT1, "right", 68)
DllStructSetData($tRECT1, "buttom", 81)
Global $pRECT1 = DllStructGetPtr($tRECT1)

Global $tRECT2 = DllStructCreate("long left;long top;long right;long buttom")
DllStructSetData($tRECT2, "left", 159)
DllStructSetData($tRECT2, "top", 68)
DllStructSetData($tRECT2, "right", 172)
DllStructSetData($tRECT2, "buttom", 81)
Global $pRECT2 = DllStructGetPtr($tRECT2)

Global Const $tagREDEYECORRECTIONPARAMS = "uint numberOfAreas;int areas[2]"
Global $tRedEye = DllStructCreate($tagREDEYECORRECTIONPARAMS)
Global Const $pRedEye = DllStructGetPtr($tRedEye)
DllStructSetData($tRedEye, "numberOfAreas", 2)
DllStructSetData($tRedEye, "areas", $tRECT1, 1)
DllStructSetData($tRedEye, "areas", $tRECT2, 2)
$hEffect = _GDIPlus_EffectCreate($GDIP_REDEYECORRECTIONEFFECT)
ConsoleWrite(_GDIPlus_EffectsSetParameters($hEffect, $pRedEye) & " / " & @error & @LF)

but it is not working - return code 8, error code 2.

I'm an absolute C++ noob and I hope somebody can help here. ;)

Br,

UEZ

Edited by UEZ

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

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted

UEZ,

Your RECT structures must be contiguous in memory, so you have to create them in one DLLStruct, something like:

$tRECTs = DLLStructCreate("long[" & $nNumRects*4 "];")

Also the RedEyeCorrectionParams structure should be (the 2nd field gets a ptr to $tRECTS):

$tagREDEYECORRECTIONPARAMS = "uint numberOfAreas;ptr areas;"

Finally, I'm not sure about how you implement the 'SetParameters' call. It's defined like this in the Windows SDK:

GdipSetEffectParameters(CGpEffect *effect, const VOID *params, const UINT size);

..and called like this (although I'm not sure why sizeof(RECT) is used as its separate from the structure):

GdipSetEffectParameters(&Effect, &Params, sizeof(RedEyeCorrectionParams) + (sizeof(RECT) * nNumAreas) )

You might want to look at 'gdipluseffects.h" header in the Windows SDK, if you have it.

Posted (edited)

Thanks Ascend4nt,

here whole code:

;http://msdn.microsoft.com/en-us/library/windows/desktop/ms534056(v=vs.85).aspx
#include <GDIplus.au3>
#include <Memory.au3>

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_TINTEFFECT = "{1077AF00-2848-4441-9489-44AD4C2D7A2C}"
Global Const $GDIP_SHARPENEFFECT = "{63CBF3EE-C526-402c-8F71-62C540BF5142}"

_GDIPlus11_Startup()
If @error Then Exit MsgBox(0x40010, "Error", "GDI+ Effect Collection can run on operating systems Vista or newer only!")


Global $hBitmap = _GDIPlus_BMPFromMemory(_RedEye())
Global $iW = _GDIPlus_ImageGetWidth($hBitmap)
Global $iH = _GDIPlus_ImageGetHeight($hBitmap)
Global $hGUI = GUICreate("GDI+ v1.1 Effect Collection by UEZ 2013", $iW * 2, $iH, -1 , 100)
GUISetState()

Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, $iW, 0, $iW, $iH)

Global $hEffect

Global $tRECTF = DllStructCreate($tagGDIPRECTF)
DllStructSetData($tRECTF, "X", 0)
DllStructSetData($tRECTF, "Y", 0)
DllStructSetData($tRECTF, "Width", $iW)
DllStructSetData($tRECTF, "Height", $iH)
Global $pRECTF = DllStructGetPtr($tRECTF)

;Color LUT
Global Const $tagCOLORLUTPARAMS = "byte ColorChannelLUTB[256];byte ColorChannelLUTG[256];byte ColorChannelLUTR[256];byte ColorChannelLUTA[256]"
Global $tColorLUT = DllStructCreate($tagCOLORLUTPARAMS)
For $i = 192  To 256
    DllStructSetData($tColorLUT, "ColorChannelLUTR", 0xA0, $i)
    DllStructSetData($tColorLUT, "ColorChannelLUTG", 0xB0, $i)
    DllStructSetData($tColorLUT, "ColorChannelLUTB", 0xC0, $i)
Next
$hEffect = _GDIPlus_ColorLUT($tColorLUT)
ConsoleWrite("Color LUT" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Blur
Global Const $tagBLURPARAMS = "float radius;bool expandEdge" ;0-255; False/True
Global $tBlur = DllStructCreate($tagBLURPARAMS)
$hEffect = _GDIPlus_Blur($tBlur, 10)
ConsoleWrite("Blur" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Brightness Contrast
Global Const $tagBRIGHTNESSCONTRASTPARAMS = "int brightnessLevel;int contrastLevel" ;-255-255; -100-100
Global $tBrightnessContrast = DllStructCreate($tagBRIGHTNESSCONTRASTPARAMS)
$hEffect = _GDIPlus_BrightnessContrast($tBrightnessContrast, -60, 90)
ConsoleWrite("Brightness Contrast" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Color Balance
Global Const $tagCOLORBALANCEPARAMS = "int cyanRed;int magentaGreen;int yellowBlue" ;-100-100; -100-100; -100-100
Global $tColorBalance = DllStructCreate($tagCOLORBALANCEPARAMS)
$hEffect = _GDIPlus_ColorBalance($tColorBalance, 60, -50, 20)
ConsoleWrite("Color Balance" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Color Curve
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 Const $tagCOLORCURVEEFFECTPARAMS = "int type;int channel;int value"
Global $tColorCurve = DllStructCreate($tagCOLORCURVEEFFECTPARAMS)
$hEffect = _GDIPlus_ColorCurve($tColorCurve, $iAdjustHighlight, $iCurveChannelAll, 90)
ConsoleWrite("Color Curve" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Color Matrix
Global Const $tagGDIPCOLORMATRIXPARAMS = "float m[25];"
Global $tColorMatrix = DllStructCreate($tagGDIPCOLORMATRIXPARAMS)
Global $fRed = 0.66, $fGreen = 0.5, $fBlue = 0.5, $fAlpha = 1
$hEffect = _GDIPlus_ColorMatrix($tColorMatrix, $fRed, $fGreen, $fBlue, $fAlpha)
ConsoleWrite("Color Matrix" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Hue Saturation Lightness
Global Const $tagHUESATURATIONLIGHTNESSPARAMS = "int hueLevel;int saturationLevel;int lightnessLevel" ;-180-180; -100-100; -100-100
Global $tHueSaturationLightness = DllStructCreate($tagHUESATURATIONLIGHTNESSPARAMS)
$hEffect = _GDIPlus_HueSaturationLightness($tHueSaturationLightness, 90, -50, 20)
ConsoleWrite("Hue Saturation Lightness" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Levels
Global Const $tagLEVELSPARAMS = "int highlight;int midtone;int shadow" ;0-100; -100-100; 0-100
Global $tLevels = DllStructCreate($tagLEVELSPARAMS)
$hEffect = _GDIPlus_Levels($tLevels, 60, -50, 20)
ConsoleWrite("Levels" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Sharpen
Global Const $tagSHARPENPARAMS = "float radius;float amount" ;0-255; 0-100
Global $tSharpen = DllStructCreate($tagSHARPENPARAMS)
$hEffect = _GDIPlus_Sharpen($tSharpen, 60, 90)
ConsoleWrite("Sharpen" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Tint
Global Const $tagTINTPARAMS = "int hue;int amount" ;-180-180; -100-100
Global $tTint = DllStructCreate($tagTINTPARAMS)
$hEffect = _GDIPlus_Tint($tTint, 60, 40)
ConsoleWrite("Tint" & @CRLF)
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)
_GDIPlus_EffectDispose($hEffect)
Sleep(3000)

;Red Eye -> http://msdn.microsoft.com/en-us/library/windows/desktop/ms534928(v=vs.85).aspx
Global $nNumRects = 2
Global $tRECTs = DLLStructCreate("long[" & $nNumRects * 4  & "];")
DllStructSetData($tRECTs, 1, 50, 1)
DllStructSetData($tRECTs, 1, 64, 2)
DllStructSetData($tRECTs, 1, 50 + 22, 3)
DllStructSetData($tRECTs, 1, 64 + 18, 4)
DllStructSetData($tRECTs, 1, 155, 5)
DllStructSetData($tRECTs, 1, 64, 6)
DllStructSetData($tRECTs, 1, 155 + 21, 7)
DllStructSetData($tRECTs, 1, 64 + 18, 8)
Global Const $pRECTs = DllStructGetPtr($tRECTs)
Global Const $tagREDEYECORRECTIONPARAMS = "uint numberOfAreas;ptr areas;"
Global $tRedEye = DllStructCreate($tagREDEYECORRECTIONPARAMS)
Global Const $pRedEye = DllStructGetPtr($tRedEye)
DllStructSetData($tRedEye, "numberOfAreas", $nNumRects)
DllStructSetData($tRedEye, "areas", $pRECTs)

$hEffect = _GDIPlus_EffectCreate($GDIP_REDEYECORRECTIONEFFECT)
;~ ConsoleWrite(_GDIPlus_EffectsSetParametersRE($hEffect, $pRedEye, DllStructGetSize($tRedEye) + ($nNumRects * 4*4)) & " / " & @error & @LF)
ConsoleWrite("Red Eye" & @CRLF)
_GDIPlus_EffectsSetParameters($hEffect, $pRedEye, (DllStructGetSize($tRECTs) + DllStructGetSize($tRedEye)) / DllStructGetSize($tRedEye))
_GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect)

;~ $hBitmap_Effect = _GDIPlus_BitmapCreateApplyEffect($hBitmap, $hEffect)
;~ _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap_Effect, 0, 0)

$tBlur = 0
$tTint = 0
$tColorCurve = 0
$tSharpen = 0
$tColorMatrix = 0
$tBrightnessContrast = 0
$tLevels = 0
$tColorBalance = 0
$tColorColorChannelLUT = 0
$tRedEye = 0
$tRECTF1 = 0
$tRECTF2 = 0
$tRECTF = 0

Sleep(4000)
MsgBox(0, "", "Done", 15)

Do
Until GUIGetMsg() = -3


_GDIPlus_BitmapDispose($hBitmap)
;~ _GDIPlus_BitmapDispose($hBitmap_Effect)
_GDIPlus_GraphicsDispose($hGraphics)

_GDIPlus_Shutdown()

Exit

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 $hEffect = _GDIPlus_EffectCreate($GDIP_BLUREFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tBlur))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_BrightnessContrast($tBrightnessContrast, $iBrightnessLevel, $iContrastLevel)
    If Not IsDllStruct($tBlur) Then Return SetError(1, @error, 0)
    DllStructSetData($tBrightnessContrast, "brightnessLevel", $iBrightnessLevel)
    DllStructSetData($tBrightnessContrast, "contrastLevel", $iContrastLevel)
    Local $hEffect = _GDIPlus_EffectCreate($GDIP_BRIGHTNESSCONTRASTEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tBrightnessContrast))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_ColorBalance($tColorBalance, $iCyanRed, $iMagentaGreen, $iYellowBlue)
    If Not IsDllStruct($tBlur) Then Return SetError(1, @error, 0)
    DllStructSetData($tColorBalance, "cyanRed", $iCyanRed)
    DllStructSetData($tColorBalance, "magentaGreen", $iMagentaGreen)
    DllStructSetData($tColorBalance, "yellowBlue", $iYellowBlue)
    Local $hEffect = _GDIPlus_EffectCreate($GDIP_COLORBALANCEEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tColorBalance))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_ColorCurve($tColorCurve, $iType, $iChannel, $iValue)
    If Not IsDllStruct($tBlur) Then Return SetError(1, @error, 0)
    DllStructSetData($tColorCurve, "type", $iType)
    DllStructSetData($tColorCurve, "channel", $iChannel)
    DllStructSetData($tColorCurve, "value", $iValue)
    Local $hEffect = _GDIPlus_EffectCreate($GDIP_COLORCURVEEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tColorCurve))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_ColorLUT($tColorLUT)
    If Not IsDllStruct($tColorLUT) Then Return SetError(1, @error, 0)
    Local $hEffect = _GDIPlus_EffectCreate($GDIP_COLORLUTEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tColorLUT))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_ColorMatrix($tColorMatrix, $fRed, $fGreen, $fBlue, $fAlpha)
    If Not IsDllStruct($tBlur) 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 $hEffect = _GDIPlus_EffectCreate($GDIP_COLORMATRIXEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tColorMatrix))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_HueSaturationLightness($tHueSaturationLightness, $iHueLevel, $iSaturationLevel, $iLightnessLevel)
    If Not IsDllStruct($tBlur) Then Return SetError(1, @error, 0)
    DllStructSetData($tHueSaturationLightness, "hueLevel", $iHueLevel)
    DllStructSetData($tHueSaturationLightness, "saturationLevel", $iSaturationLevel)
    DllStructSetData($tHueSaturationLightness, "lightnessLevel", $iLightnessLevel)
    Local $hEffect = _GDIPlus_EffectCreate($GDIP_HUESATURATIONLIGHTNESSEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tHueSaturationLightness))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_Levels($tLevels, $iHighlight, $iMidtone, $iShadow)
    If Not IsDllStruct($tBlur) Then Return SetError(1, @error, 0)
    DllStructSetData($tLevels, "highlight", 60)
    DllStructSetData($tLevels, "midtone", -50)
    DllStructSetData($tLevels, "shadow", 20)
    Local $hEffect = _GDIPlus_EffectCreate($GDIP_LEVELSEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tLevels))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_Sharpen($tSharpen, $fRadius, $fAmount)
    If Not IsDllStruct($tBlur) Then Return SetError(1, @error, 0)
    DllStructSetData($tSharpen, "radius", $fRadius)
    DllStructSetData($tSharpen, "amount", $fAmount)
    Local $hEffect = _GDIPlus_EffectCreate($GDIP_SHARPENEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tSharpen))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

Func _GDIPlus_Tint($tTint, $iHue, $iAmount)
    If Not IsDllStruct($tBlur) Then Return SetError(1, @error, 0)
    DllStructSetData($tTint, "hue", $iHue)
    DllStructSetData($tTint, "amount", $iAmount)
    Local $hEffect = _GDIPlus_EffectCreate($GDIP_TINTEFFECT)
    If @error Then Return SetError(2, @error, 0)
    _GDIPlus_EffectsSetParameters($hEffect, DllStructGetPtr($tTint))
    If @error Then Return SetError(3, @error, 0)
    Return $hEffect
EndFunc

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($hEffectObject, $pEffectParameters, $iSizeAdj = 1)
    Local $aSize = DllCall($ghGDIPDll, "uint", "GdipGetEffectParameterSize", "handle", $hEffectObject, "uint*", 0)
    Local $iSize = $aSize[2] * $iSizeAdj
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetEffectParameters", "handle", $hEffectObject, "ptr", $pEffectParameters, "uint", $iSize)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[3])
EndFunc   ;==>_GDIPlus_EffectsSetParameters

Func _GDIPlus_BitmapCreateApplyEffect($hBitmap, $hEffect, $pROI = 0, $pOutRect = 0, $hBmpOutput = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipBitmapCreateApplyEffect", _
            "ptr*", $hBitmap, _
            "int", 1, _
            "handle", $hEffect, _
            "ptr", $pROI, _
            "ptr", $pOutRect, _
            "int*", $hBmpOutput, _
            "int", 0, "ptr*", 0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[6])
EndFunc   ;==>_GDIPlus_BitmapCreateApplyEffect

Func _GDIPlus_EffectDispose($hEffect)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipDeleteEffect", "handle", $hEffect)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[0] = 0)
EndFunc   ;==>_GDIPlus_EffectDispose

Func _GDIPlus_BitmapApplyEffect($hBitmap, $hEffect, $pROI = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipBitmapApplyEffect", "handle", $hBitmap, "handle", $hEffect, "ptr", $pROI, "int", 0, "ptr*", 0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[0] = 0)
EndFunc   ;==>_GDIPlus_BitmapApplyEffect

Func _GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect, $hMatrix = 0, $ImgAttributes = 0, $iUnit = 2)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipDrawImageFX", "handle", $hGraphics, _
            "handle", $hBitmap, _
            "ptr", $pRECTF, _
            "handle", $hMatrix, _
            "handle", $hEffect, _
            "ptr", $ImgAttributes, _
            "uint", $iUnit)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[0] = 0)
EndFunc   ;==>_GDIPlus_DrawImageFX

Func _GDIPlus11_Startup() ;code by Authenticity - modified by UEZ
    Local $pInput, $tInput, $pToken, $tToken, $aResult, $os

    $giGDIPRef += 1
    If $giGDIPRef > 1 Then Return True

    Switch @OSVersion
        Case "WIN_VISTA", "WIN_2008"
            $ghGDIPDll = DllOpen(@WindowsDir & "\winsxs\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.6000.16386_none_8df21b8362744ace\gdiplus.dll")
        Case "WIN_2008R2", "WIN_7", "WIN_8"
            $ghGDIPDll = DllOpen(@SystemDir & "\gdiplus.dll")
        Case Else
            Return SetError(1)
    EndSwitch
;~     _WinAPI_Check("_GDIPlus_Startup (GDIPlus.dll not found)", @error, False)

    $tInput = DllStructCreate($tagGDIPSTARTUPINPUT)
    $pInput = DllStructGetPtr($tInput)
    $tToken = DllStructCreate("int Data")
    $pToken = DllStructGetPtr($tToken)
    DllStructSetData($tInput, "Version", 1)
    $aResult = DllCall($ghGDIPDll, "int", "GdiplusStartup", "ptr", $pToken, "ptr", $pInput, "ptr", 0)
    If @error Then Return SetError(@error, @extended, False)
    $giGDIPToken = DllStructGetData($tToken, "Data")
    Return $aResult[0] = 0
EndFunc   ;==>_GDIPlus11_Startup


#region Example Image
;======================================================================================
; Function Name:        _GDIPlus_BMPFromMemory
; Description:              Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap
;
; Parameters:               $bImage:    the binary string which contains any valid image which is supported by GDI+
; Optional:                     $hHBITMAP:  if false a bitmap will be created, if true a hbitmap will be created
;
; Remark:                       hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format
;                                       Don't forget _GDIPlus_Startup() and _GDIPlus_Shutdown()
;
; Requirement(s):       GDIPlus.au3, Memory.au3 and _WinAPI_BitmapCreateDIBFromBitmap() from WinAPIEx.au3
; Return Value(s):      Success: handle to bitmap (GDI+ bitmap format) or hbitmap (WinAPI bitmap format),
;                                       Error: 0
; Error codes:              1: $bImage is not a binary string
;                                       2: unable to create stream on HGlobal
;                                       3: unable to create bitmap from stream
;
; Author(s):                    UEZ
; Additional Code:      thanks to progandy for the MemGlobalAlloc and tVARIANT lines and
;                                       Yashied for _WinAPI_BitmapCreateDIBFromBitmap() from WinAPIEx.au3
; Version:                      v0.98 Build 2012-08-29 Beta
;=======================================================================================
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.11 Build 2012-10-13

Func _RedEye($bSaveBinary = False)
    Local $RedEye
    $RedEye &= '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'
    $RedEye &= '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'
    $RedEye &= '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'
    $RedEye &= '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'
    $RedEye &= 'oLTITOkcxV1zMR1BJS6FxAMggimIMsly4SR8wmKzrp4+4f2sGIial0SmVqrYGY2qdtBzRmOB70KGtqlG+AaQ+xrSpkAZoTYLbO/mTHJO1OJXpOTBFVE0t+I1lVkWxvvS32Un2QdMWE28xsNqkWFfUeq3NoS7cMBNtqjUDn3qpNn3PXZ30q9beZQ60sFKtqXob8jZNwQmAZFVstQLcvApMmKR+iBHV1P3C2unsl7RusmE/Sjx/I8rTZDq120rToPINTs/sR8Np/Mec2BMCnCyaqAU7mYq2c6VE5IzPrSa6UrIB/mkYd0fMQJpKlDrViDgUjCuKIwTjgUGGdUQoJn0kU0++wr64RAPpvimzy6BnJEyMc9j/wAVri4+W/QFweI4olJVBiTRWWmUuwNAK4JCgPrEftNVA7YLMpGCoAZHHvUZN+M+tFQN5/aorqx7NGFYEcZqa0hgyoadJpKHM7gk4FIDkeVKTgmmn2JQdWMGR2pi9C2SNOo04yy36L7/AEuJUk5MVNvasZ0z7P8A6N0hf/tk9tqKLPoTfItL+2DflzxwaXtWONx7L0234BcNAeGdwBgVcZZXsR47mMGPSjQ8ppU6lV2PDJKUH5vbtT9FvdMOmN9PsGilISkRsNgai2NrhllFV04i7XptgVTuRgUvYxxsOumNBhoIMd6acjVpUiqiFTh0qnmitJ2pcURJI47UtqkCrUcgc9zSUoUomR259KAFdgEQJgzQAr51TjmZp+y9AnVaSEJwfWqkY53fYdKwlhzOIjV2EnH1rXH04c72Vu3S2nFJQec6hzWdt2JCfqzBZZ7DVO23b960xLL3YCs1gLMQIzjmlk14z61VpEDPes66cabW7kBIJ42AqWkMrdcAxEdqTTQxo5Sc/WkDBkyQcmmkU3uCKCtWOLCZ3iltGthHDKiRgmltpPWglyylwEKAIjkUHKXL6eEL1sah3AODStVMtTVMha62xr+aKuVz5e1RsztnNPaPGCEWf5agAB60rVToInp7ZXK06ozBqPt0+V9DbdlKT8okbUy2MSdJ2zRtFXtuYHFOVNixyFIJJqhLqh1zsPuaTTc+wroknGIoPYZxXIkwd6DDunyaeIyaC39hn3PmgASPpTRZoA+sgKKonseKqOfkv4C3EJ0TnVkg44n61rXJWavLhX4p0mVEmSRNYZZarfHHoT1R0uWzobSFypQPuMx+la4M+X/vIrQwpBnVM7/tRVYHlooxEzUV0Y2G1uoTvioaymVuoxuZ2E0mko5gmRJwaDM2VTjahmKQ4AN5o2VVOrzMZqbVYqyed6AiZJM8cUz2taQCRjNJGVGttpKIj9KuMrX3hxxinobWBseHPP8Aeke+wbqYXMDNRemsvSl19LbjaVTKsAxTt0vDC5S2LgrO0UqlJK4pbC8Lx6VUqUVq82aez+gziSTj2oPYR48Zg9jTOBFqkiSByZoOhn9iRsMY7U2VoF0AvQSkgEA/Srxc2d6DXylpWYASdMgRtxV2ucht2g+lThVEqxisNb7dmONs6ZD4P6i89069bfWta0veIVkzMiumyS9OG2+W6e4UsGIkgCOPKDtUVthTK0mTxmKixvKaW6sEZxUVriZMrIUJpVriPaOUig9mFucJ9aSbRBUYEUk7cnaeaBKiFSfQUj2mkSByfWmW1rf2EU5E0e2sBkECrnplfbhdEHFGzkSS7qSMR2o9wa0oeTmDzU2HMgq0hwDUNjik2xysfJKisgxAxUn9Jp3PtS2m1NKiFAb0wm4cA0ylDPKg01TsC6rWJ43FNfoK5kCQNJmnCtDkkygGABNNjnfsvcUUztG3rNaRz53ZX1G40NPOpEeQx6YoyvTKTt5v1jrvULbqLrNq8W2kQNMcwKMMJZtr/Uyx6j//2Q=='
    Local $bString = Binary(_Base64Decode($RedEye))
    If $bSaveBinary Then
        Local $hFile = FileOpen(@ScriptDir & "\220px-BoldRedEye.JPG", 18)
        FileWrite($hFile, $bString)
        FileClose($hFile)
    EndIf
    Return  $bString
EndFunc   ;==>_RedEye

Func _Base64Decode($sB64String)
    Local $struct = DllStructCreate("int")
    Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
    If @error Or Not $a_Call[0] Then Return SetError(1, 0, "")
    Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]")
    $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $sB64String, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
    If @error Or Not $a_Call[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($a, 1)
EndFunc   ;==>_Base64Decode
#endregion

All other FX are working except teh red eye one!

It is still not working when I did it the way you described. Hmmm....

Br,

UEZ

Edited by UEZ

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

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Posted

I added an alternative function call to 'GdipSetEffectParameters' which accepts a size, and also fixed the code where you set the "areas" structure member, and it seems to return okay. However, I don't actually see anything displayed in the GUI when I select a picture, so I'm not sure what that's about.

Here's the code adjustments:

Func _GDIPlus_EffectsSetParametersRE($hEffectObject, $pEffectParameters, $nSize)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetEffectParameters", "handle", $hEffectObject, "ptr", $pEffectParameters, "uint", $nSize)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[3])
EndFunc   ;==>_GDIPlus_EffectsSetParameters

Global $nNumRects = 2
Global $tRECTs = DLLStructCreate("long[" & $nNumRects * 4  & "];")
DllStructSetData($tRECTs, 1, 55, 1)
DllStructSetData($tRECTs, 1, 69, 2)
DllStructSetData($tRECTs, 1, 68, 3)
DllStructSetData($tRECTs, 1, 81, 4)
DllStructSetData($tRECTs, 1, 159, 5)
DllStructSetData($tRECTs, 1, 68, 6)
DllStructSetData($tRECTs, 1, 172, 7)
DllStructSetData($tRECTs, 1, 81, 8)
Global Const $tagREDEYECORRECTIONPARAMS = "uint numberOfAreas;ptr areas;"
Global $tRedEye = DllStructCreate($tagREDEYECORRECTIONPARAMS)
Global Const $pRedEye = DllStructGetPtr($tRedEye)
DllStructSetData($tRedEye, "numberOfAreas", $nNumRects)
DllStructSetData($tRedEye, "areas", DllStructGetPtr($tRECTs))
$hEffect = _GDIPlus_EffectCreate($GDIP_REDEYECORRECTIONEFFECT)
;ConsoleWrite(_GDIPlus_EffectsSetParameters($hEffect, $pRedEye) & " / " & @error & @LF)
ConsoleWrite(_GDIPlus_EffectsSetParametersRE($hEffect, $pRedEye, DllStructGetSize($tRedEye) + ($nNumRects * 4*4)) & " / " & @error & @LF)
Posted (edited)

Ascend4nt,

thank you very much for your help! Now it seems to work whereas I've to check the coordinates of the red eyes.

Indeed, I forgot the line _GDIPlus_DrawImageFX($hGraphics, $hBitmap, $pRECTF, $hEffect) to display the affected image.

I updated the code from post#3.

Br,

UEZ

Edited by UEZ

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

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

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
×
×
  • Create New...