From: Vijay Kiran Kamuju infyquest@gmail.com
--- dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/image.c | 58 ++++++++++++++++++++++++++++++++++++++ dlls/gdiplus/tests/image.c | 17 +++++++++++ include/gdipluseffects.h | 1 + 4 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 0f17bb02d4d..ff654558b72 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -613,7 +613,7 @@ 613 stdcall GdipCreateEffect(int128 ptr) 614 stdcall GdipDeleteEffect(ptr) 615 stdcall GdipGetEffectParameterSize(ptr ptr) -616 stub GdipGetEffectParameters +616 stdcall GdipGetEffectParameters(ptr ptr ptr) 617 stdcall GdipSetEffectParameters(ptr ptr long) 618 stdcall GdipInitializePalette(ptr long long long ptr) 619 stdcall GdipBitmapCreateApplyEffect(ptr long ptr ptr ptr ptr long ptr ptr) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 47485f4505c..6c3fd9ff083 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -5723,6 +5723,64 @@ GpStatus WINGDIPAPI GdipGetEffectParameterSize(CGpEffect *effect, UINT *size) return status; }
+/***************************************************************************** + * GdipGetEffectParameters [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetEffectParameters(CGpEffect *effect, + UINT *size, VOID *params) +{ + GpStatus stat; + + TRACE("(%p,%p,%p)\n", effect, size, params); + if (!effect || !params || !size) + return InvalidParameter; + + stat = GdipGetEffectParameterSize(effect, size); + if (stat) + { + switch (effect->type) + { + case BlurEffect: + params = &effect->p.blurparams; + break; + case SharpenEffect: + params = &effect->p.sharpenparams; + break; + case TintEffect: + params = &effect->p.tintparams; + break; + case RedEyeCorrectionEffect: + params = &effect->p.redeyeparams; + break; + case ColorMatrixEffect: + params = &effect->p.clrmatrixparams; + break; + case ColorLUTEffect: + params = &effect->p.clrlutparams; + break; + case BrightnessContrastEffect: + params = &effect->p.brtcntrstparams; + break; + case HueSaturationLightnessEffect: + params = &effect->p.huesatliteparams; + break; + case ColorBalanceEffect: + params = &effect->p.clrbalanceparams; + break; + case LevelsEffect: + params = &effect->p.levelsparams; + break; + case ColorCurveEffect: + params = &effect->p.clrcurveparams; + break; + default: + return InvalidParameter; + } + stat = Ok; + } + return stat; +} + /***************************************************************************** * GdipSetEffectParameters [GDIPLUS.@] */ diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 5690f6bb27e..d5788499d94 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -5408,6 +5408,7 @@ static void test_createeffect(void) GpStatus (WINAPI *pGdipCreateEffect)( const GUID guid, CGpEffect **effect); GpStatus (WINAPI *pGdipDeleteEffect)( CGpEffect *effect); GpStatus (WINAPI *pGdipGetEffectParameterSize)( CGpEffect *effect, UINT *size); + GpStatus (WINAPI *pGdipGetEffectParameters)( CGpEffect *effect, UINT *size, VOID *params); GpStatus (WINAPI *pGdipSetEffectParameters)( CGpEffect *effect, const VOID *params, const UINT size); GpStatus stat; CGpEffect *effect; @@ -5435,6 +5436,7 @@ static void test_createeffect(void) pGdipCreateEffect = (void*)GetProcAddress( mod, "GdipCreateEffect"); pGdipDeleteEffect = (void*)GetProcAddress( mod, "GdipDeleteEffect"); pGdipGetEffectParameterSize = (void*)GetProcAddress( mod, "GdipGetEffectParameterSize"); + pGdipGetEffectParameters = (void*)GetProcAddress( mod, "GdipGetEffectParameters"); pGdipSetEffectParameters = (void*)GetProcAddress( mod, "GdipSetEffectParameters"); if(!pGdipCreateEffect || !pGdipDeleteEffect) { @@ -5452,12 +5454,21 @@ static void test_createeffect(void) stat = pGdipSetEffectParameters(NULL, NULL, 0); expect(InvalidParameter, stat);
+ stat = pGdipGetEffectParameters(NULL, NULL, NULL); + expect(InvalidParameter, stat); + stat = pGdipGetEffectParameterSize(effect, NULL); expect(InvalidParameter, stat);
stat = pGdipSetEffectParameters(effect, params, 0); expect(InvalidParameter, stat);
+ stat = pGdipGetEffectParameters(effect, &size, NULL); + expect(InvalidParameter, stat); + + stat = pGdipGetEffectParameters(effect, &size, params); + expect(InvalidParameter, stat); + stat = pGdipCreateEffect(noneffect, &effect); expect(Win32Error, stat);
@@ -5584,6 +5595,12 @@ static void test_createeffect(void) size = 0; stat = pGdipGetEffectParameterSize(effect, &size); expect(paramsize, size); + size = 0; + params = malloc(paramsize); + stat = pGdipGetEffectParameters(effect, &size, params); + expect(Ok, stat); + expect(paramsize, size); + free(params);
stat = pGdipDeleteEffect(effect); expect(Ok, stat); diff --git a/include/gdipluseffects.h b/include/gdipluseffects.h index 2b94479f7f5..17a07726f33 100644 --- a/include/gdipluseffects.h +++ b/include/gdipluseffects.h @@ -112,6 +112,7 @@ extern "C" { GpStatus WINGDIPAPI GdipCreateEffect(const GUID guid, CGpEffect **effect); GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect *effect); GpStatus WINGDIPAPI GdipGetEffectParameterSize(CGpEffect *effect, UINT *size); +GpStatus WINGDIPAPI GdipGetEffectParameters(CGpEffect *effect, UINT *size, VOID *params); GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect *effect, const VOID *params, const UINT size);
#ifdef __cplusplus