You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
522 lines
11 KiB
C++
522 lines
11 KiB
C++
/**************************************************************************
|
|
*
|
|
* Copyright (c) 2001 Microsoft Corporation
|
|
*
|
|
* Module Name:
|
|
*
|
|
* Gdiplus effect objects.
|
|
*
|
|
* Created:
|
|
*
|
|
* 05/29/2001 asecchia
|
|
* Created it.
|
|
*
|
|
**************************************************************************/
|
|
|
|
#ifndef _GDIPLUSEFFECTS_HPP
|
|
#define _GDIPLUSEFFECTS_HPP
|
|
|
|
#if (GDIPVER >= 0x0110)
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// GDI+ effect GUIDs
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// {633C80A4-1843-482b-9EF2-BE2834C5FDD4}
|
|
static const GUID BlurEffectGuid =
|
|
{ 0x633c80a4, 0x1843, 0x482b, { 0x9e, 0xf2, 0xbe, 0x28, 0x34, 0xc5, 0xfd, 0xd4 } };
|
|
|
|
// {63CBF3EE-C526-402c-8F71-62C540BF5142}
|
|
static const GUID SharpenEffectGuid =
|
|
{ 0x63cbf3ee, 0xc526, 0x402c, { 0x8f, 0x71, 0x62, 0xc5, 0x40, 0xbf, 0x51, 0x42 } };
|
|
|
|
// {718F2615-7933-40e3-A511-5F68FE14DD74}
|
|
static const GUID ColorMatrixEffectGuid =
|
|
{ 0x718f2615, 0x7933, 0x40e3, { 0xa5, 0x11, 0x5f, 0x68, 0xfe, 0x14, 0xdd, 0x74 } };
|
|
|
|
// {A7CE72A9-0F7F-40d7-B3CC-D0C02D5C3212}
|
|
static const GUID ColorLUTEffectGuid =
|
|
{ 0xa7ce72a9, 0xf7f, 0x40d7, { 0xb3, 0xcc, 0xd0, 0xc0, 0x2d, 0x5c, 0x32, 0x12 } };
|
|
|
|
// {D3A1DBE1-8EC4-4c17-9F4C-EA97AD1C343D}
|
|
static const GUID BrightnessContrastEffectGuid =
|
|
{ 0xd3a1dbe1, 0x8ec4, 0x4c17, { 0x9f, 0x4c, 0xea, 0x97, 0xad, 0x1c, 0x34, 0x3d } };
|
|
|
|
// {8B2DD6C3-EB07-4d87-A5F0-7108E26A9C5F}
|
|
static const GUID HueSaturationLightnessEffectGuid =
|
|
{ 0x8b2dd6c3, 0xeb07, 0x4d87, { 0xa5, 0xf0, 0x71, 0x8, 0xe2, 0x6a, 0x9c, 0x5f } };
|
|
|
|
// {99C354EC-2A31-4f3a-8C34-17A803B33A25}
|
|
static const GUID LevelsEffectGuid =
|
|
{ 0x99c354ec, 0x2a31, 0x4f3a, { 0x8c, 0x34, 0x17, 0xa8, 0x3, 0xb3, 0x3a, 0x25 } };
|
|
|
|
// {1077AF00-2848-4441-9489-44AD4C2D7A2C}
|
|
static const GUID TintEffectGuid =
|
|
{ 0x1077af00, 0x2848, 0x4441, { 0x94, 0x89, 0x44, 0xad, 0x4c, 0x2d, 0x7a, 0x2c } };
|
|
|
|
// {537E597D-251E-48da-9664-29CA496B70F8}
|
|
static const GUID ColorBalanceEffectGuid =
|
|
{ 0x537e597d, 0x251e, 0x48da, { 0x96, 0x64, 0x29, 0xca, 0x49, 0x6b, 0x70, 0xf8 } };
|
|
|
|
// {74D29D05-69A4-4266-9549-3CC52836B632}
|
|
static const GUID RedEyeCorrectionEffectGuid =
|
|
{ 0x74d29d05, 0x69a4, 0x4266, { 0x95, 0x49, 0x3c, 0xc5, 0x28, 0x36, 0xb6, 0x32 } };
|
|
|
|
// {DD6A0022-58E4-4a67-9D9B-D48EB881A53D}
|
|
static const GUID ColorCurveEffectGuid =
|
|
{ 0xdd6a0022, 0x58e4, 0x4a67, { 0x9d, 0x9b, 0xd4, 0x8e, 0xb8, 0x81, 0xa5, 0x3d }
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
struct SharpenParams
|
|
{
|
|
float radius;
|
|
float amount;
|
|
};
|
|
|
|
struct BlurParams
|
|
{
|
|
float radius;
|
|
BOOL expandEdge;
|
|
};
|
|
|
|
struct BrightnessContrastParams
|
|
{
|
|
INT brightnessLevel;
|
|
INT contrastLevel;
|
|
};
|
|
|
|
struct RedEyeCorrectionParams
|
|
{
|
|
UINT numberOfAreas;
|
|
RECT *areas;
|
|
};
|
|
|
|
struct HueSaturationLightnessParams
|
|
{
|
|
INT hueLevel;
|
|
INT saturationLevel;
|
|
INT lightnessLevel;
|
|
};
|
|
|
|
struct TintParams
|
|
{
|
|
INT hue;
|
|
INT amount;
|
|
};
|
|
|
|
struct LevelsParams
|
|
{
|
|
INT highlight;
|
|
INT midtone;
|
|
INT shadow;
|
|
};
|
|
|
|
struct ColorBalanceParams
|
|
{
|
|
INT cyanRed;
|
|
INT magentaGreen;
|
|
INT yellowBlue;
|
|
};
|
|
|
|
struct ColorLUTParams
|
|
{
|
|
// look up tables for each color channel.
|
|
|
|
ColorChannelLUT lutB;
|
|
ColorChannelLUT lutG;
|
|
ColorChannelLUT lutR;
|
|
ColorChannelLUT lutA;
|
|
};
|
|
|
|
enum CurveAdjustments
|
|
{
|
|
AdjustExposure,
|
|
AdjustDensity,
|
|
AdjustContrast,
|
|
AdjustHighlight,
|
|
AdjustShadow,
|
|
AdjustMidtone,
|
|
AdjustWhiteSaturation,
|
|
AdjustBlackSaturation
|
|
};
|
|
|
|
enum CurveChannel
|
|
{
|
|
CurveChannelAll,
|
|
CurveChannelRed,
|
|
CurveChannelGreen,
|
|
CurveChannelBlue
|
|
};
|
|
|
|
struct ColorCurveParams
|
|
{
|
|
CurveAdjustments adjustment;
|
|
CurveChannel channel;
|
|
INT adjustValue;
|
|
};
|
|
|
|
class CGpEffect;
|
|
|
|
extern "C" {
|
|
Status __stdcall
|
|
GdipCreateEffect(const GUID guid, CGpEffect **effect);
|
|
|
|
Status __stdcall
|
|
GdipDeleteEffect(CGpEffect *effect);
|
|
|
|
Status __stdcall
|
|
GdipGetEffectParameterSize(CGpEffect *effect, UINT *size);
|
|
|
|
Status __stdcall
|
|
GdipSetEffectParameters(CGpEffect *effect, const VOID *params, const UINT size);
|
|
|
|
Status __stdcall
|
|
GdipGetEffectParameters(CGpEffect *effect, UINT *size, VOID *params);
|
|
}
|
|
|
|
#ifndef _GDIPLUSEFFECTS_EXCLUDEOBJECTS
|
|
|
|
class Effect
|
|
{
|
|
friend class Bitmap;
|
|
friend class Graphics;
|
|
|
|
public:
|
|
|
|
Effect()
|
|
{
|
|
auxDataSize = 0;
|
|
auxData = NULL;
|
|
nativeEffect = NULL;
|
|
useAuxData = FALSE;
|
|
}
|
|
|
|
virtual ~Effect()
|
|
{
|
|
// pvData is allocated by ApplyEffect. Return the pointer so that
|
|
// it can be freed by the appropriate memory manager.
|
|
|
|
DllExports::GdipFree(auxData);
|
|
|
|
// Release the native Effect.
|
|
|
|
GdipDeleteEffect(nativeEffect);
|
|
}
|
|
|
|
INT GetAuxDataSize() const
|
|
{
|
|
return auxDataSize;
|
|
}
|
|
|
|
VOID *GetAuxData() const
|
|
{
|
|
return auxData;
|
|
}
|
|
|
|
VOID UseAuxData(const BOOL useAuxDataFlag)
|
|
{
|
|
useAuxData = useAuxDataFlag;
|
|
}
|
|
|
|
Status GetParameterSize(UINT *size)
|
|
{
|
|
return GdipGetEffectParameterSize(nativeEffect, size);
|
|
}
|
|
|
|
protected:
|
|
|
|
Status SetParameters(const void *params, const UINT size)
|
|
{
|
|
return GdipSetEffectParameters(nativeEffect, params, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, void *params)
|
|
{
|
|
return GdipGetEffectParameters(nativeEffect, size, params);
|
|
}
|
|
|
|
// protected data members.
|
|
|
|
CGpEffect *nativeEffect;
|
|
INT auxDataSize;
|
|
VOID *auxData;
|
|
BOOL useAuxData;
|
|
};
|
|
|
|
// Blur
|
|
|
|
class Blur : public Effect
|
|
{
|
|
public:
|
|
|
|
// constructors cannot return an error code.
|
|
|
|
Blur()
|
|
{
|
|
GdipCreateEffect(BlurEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const BlurParams *parameters)
|
|
{
|
|
UINT size = sizeof(BlurParams);
|
|
return Effect::SetParameters(parameters, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, BlurParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
// Sharpen
|
|
|
|
class Sharpen : public Effect
|
|
{
|
|
public:
|
|
|
|
Sharpen()
|
|
{
|
|
GdipCreateEffect(SharpenEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const SharpenParams *parameters)
|
|
{
|
|
UINT size = sizeof(SharpenParams);
|
|
return Effect::SetParameters(parameters, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, SharpenParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
// RedEye Correction
|
|
|
|
class RedEyeCorrection : public Effect
|
|
{
|
|
public:
|
|
|
|
// constructors cannot return an error code.
|
|
|
|
RedEyeCorrection()
|
|
{
|
|
GdipCreateEffect(RedEyeCorrectionEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const RedEyeCorrectionParams *parameters)
|
|
{
|
|
Status status = InvalidParameter;
|
|
|
|
if (parameters)
|
|
{
|
|
RedEyeCorrectionParams *inputParam =
|
|
(RedEyeCorrectionParams*)parameters;
|
|
|
|
UINT size = sizeof(RedEyeCorrectionParams) +
|
|
inputParam->numberOfAreas * sizeof(RECT);
|
|
|
|
status = Effect::SetParameters(parameters, size);
|
|
}
|
|
|
|
return status;
|
|
}
|
|
|
|
Status GetParameters(UINT *size, RedEyeCorrectionParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size,(VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
// Brightness/Contrast
|
|
class BrightnessContrast : public Effect
|
|
{
|
|
public:
|
|
BrightnessContrast()
|
|
{
|
|
GdipCreateEffect(BrightnessContrastEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const BrightnessContrastParams *parameters)
|
|
{
|
|
UINT size = sizeof(BrightnessContrastParams);
|
|
return Effect::SetParameters((VOID*)parameters, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, BrightnessContrastParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
// Hue/Saturation/Lightness
|
|
|
|
class HueSaturationLightness : public Effect
|
|
{
|
|
public:
|
|
HueSaturationLightness()
|
|
{
|
|
GdipCreateEffect(HueSaturationLightnessEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const HueSaturationLightnessParams *parameters)
|
|
{
|
|
UINT size = sizeof(HueSaturationLightnessParams);
|
|
return Effect::SetParameters((VOID*)parameters, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, HueSaturationLightnessParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
// Highlight/Midtone/Shadow curves
|
|
|
|
class Levels : public Effect
|
|
{
|
|
public:
|
|
Levels()
|
|
{
|
|
GdipCreateEffect(LevelsEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const LevelsParams *parameters)
|
|
{
|
|
UINT size = sizeof(LevelsParams);
|
|
return Effect::SetParameters((VOID*)parameters, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, LevelsParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
// Tint
|
|
|
|
class Tint : public Effect
|
|
{
|
|
public:
|
|
Tint()
|
|
{
|
|
GdipCreateEffect(TintEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const TintParams *parameters)
|
|
{
|
|
UINT size = sizeof(TintParams);
|
|
return Effect::SetParameters((VOID*)parameters, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, TintParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
// ColorBalance
|
|
|
|
class ColorBalance : public Effect
|
|
{
|
|
public:
|
|
ColorBalance()
|
|
{
|
|
GdipCreateEffect(ColorBalanceEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const ColorBalanceParams *parameters)
|
|
{
|
|
UINT size = sizeof(ColorBalanceParams);
|
|
return Effect::SetParameters((VOID*)parameters, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, ColorBalanceParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
// ColorMatrix
|
|
|
|
class ColorMatrixEffect : public Effect
|
|
{
|
|
public:
|
|
|
|
// constructors cannot return an error code.
|
|
|
|
ColorMatrixEffect()
|
|
{
|
|
GdipCreateEffect(ColorMatrixEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const ColorMatrix *matrix)
|
|
{
|
|
UINT size = sizeof(ColorMatrix);
|
|
return Effect::SetParameters(matrix, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, ColorMatrix *matrix)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)matrix);
|
|
}
|
|
};
|
|
|
|
|
|
// ColorLUT
|
|
|
|
class ColorLUT : public Effect
|
|
{
|
|
public:
|
|
|
|
// constructors cannot return an error code.
|
|
|
|
ColorLUT()
|
|
{
|
|
GdipCreateEffect(ColorLUTEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const ColorLUTParams *lut)
|
|
{
|
|
UINT size = sizeof(ColorLUTParams);
|
|
return Effect::SetParameters(lut, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, ColorLUTParams *lut)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)lut);
|
|
}
|
|
};
|
|
|
|
// Color Curve
|
|
|
|
class ColorCurve : public Effect
|
|
{
|
|
public:
|
|
ColorCurve()
|
|
{
|
|
GdipCreateEffect(ColorCurveEffectGuid, &nativeEffect);
|
|
}
|
|
|
|
Status SetParameters(const ColorCurveParams *parameters)
|
|
{
|
|
UINT size = sizeof(ColorCurveParams);
|
|
return Effect::SetParameters((VOID*)parameters, size);
|
|
}
|
|
|
|
Status GetParameters(UINT *size, ColorCurveParams *parameters)
|
|
{
|
|
return Effect::GetParameters(size, (VOID*)parameters);
|
|
}
|
|
};
|
|
|
|
#endif // _GDIPLUSEFFECTS_EXCLUDEEOBJECTS
|
|
|
|
#endif //(GDIPVER >= 0x0110)
|
|
|
|
#endif
|
|
|
|
|