378 lines
12 KiB
C
378 lines
12 KiB
C
|
/**************************************************************************\
|
||
|
*
|
||
|
* Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
|
||
|
*
|
||
|
* Module Name:
|
||
|
*
|
||
|
* Image Attributes
|
||
|
*
|
||
|
* Abstract:
|
||
|
*
|
||
|
* GDI+ Image Attributes used with Graphics.DrawImage
|
||
|
*
|
||
|
* There are 5 possible sets of color adjustments:
|
||
|
* ColorAdjustDefault,
|
||
|
* ColorAdjustBitmap,
|
||
|
* ColorAdjustBrush,
|
||
|
* ColorAdjustPen,
|
||
|
* ColorAdjustText,
|
||
|
*
|
||
|
* Bitmaps, Brushes, Pens, and Text will all use any color adjustments
|
||
|
* that have been set into the default ImageAttributes until their own
|
||
|
* color adjustments have been set. So as soon as any "Set" method is
|
||
|
* called for Bitmaps, Brushes, Pens, or Text, then they start from
|
||
|
* scratch with only the color adjustments that have been set for them.
|
||
|
* Calling Reset removes any individual color adjustments for a type
|
||
|
* and makes it revert back to using all the default color adjustments
|
||
|
* (if any). The SetToIdentity method is a way to force a type to
|
||
|
* have no color adjustments at all, regardless of what previous adjustments
|
||
|
* have been set for the defaults or for that type.
|
||
|
*
|
||
|
\********************************************************************F******/
|
||
|
|
||
|
#ifndef _GDIPLUSIMAGEATTRIBUTES_H
|
||
|
#define _GDIPLUSIMAGEATTRIBUTES_H
|
||
|
|
||
|
class GpImageAttributes;
|
||
|
|
||
|
class ImageAttributes : public GdiplusBase
|
||
|
{
|
||
|
friend class Graphics;
|
||
|
friend class TextureBrush;
|
||
|
|
||
|
public:
|
||
|
|
||
|
ImageAttributes()
|
||
|
{
|
||
|
nativeImageAttr = NULL;
|
||
|
lastResult = DllExports::GdipCreateImageAttributes(&nativeImageAttr);
|
||
|
}
|
||
|
|
||
|
~ImageAttributes()
|
||
|
{
|
||
|
DllExports::GdipDisposeImageAttributes(nativeImageAttr);
|
||
|
}
|
||
|
|
||
|
ImageAttributes* Clone() const
|
||
|
{
|
||
|
GpImageAttributes* clone;
|
||
|
|
||
|
SetStatus(DllExports::GdipCloneImageAttributes(
|
||
|
nativeImageAttr,
|
||
|
&clone));
|
||
|
|
||
|
return new ImageAttributes(clone, lastResult);
|
||
|
}
|
||
|
|
||
|
Status
|
||
|
SetToIdentity(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesToIdentity(
|
||
|
nativeImageAttr,
|
||
|
type));
|
||
|
}
|
||
|
|
||
|
Status
|
||
|
Reset(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipResetImageAttributes(
|
||
|
nativeImageAttr,
|
||
|
type));
|
||
|
}
|
||
|
|
||
|
Status
|
||
|
SetColorMatrix(
|
||
|
IN const ColorMatrix *colorMatrix,
|
||
|
IN ColorMatrixFlags mode = ColorMatrixFlagsDefault,
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE,
|
||
|
colorMatrix,
|
||
|
NULL,
|
||
|
mode));
|
||
|
}
|
||
|
|
||
|
Status ClearColorMatrix(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
ColorMatrixFlagsDefault));
|
||
|
}
|
||
|
|
||
|
Status
|
||
|
SetColorMatrices(
|
||
|
IN const ColorMatrix *colorMatrix,
|
||
|
IN const ColorMatrix *grayMatrix,
|
||
|
IN ColorMatrixFlags mode = ColorMatrixFlagsDefault,
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE,
|
||
|
colorMatrix,
|
||
|
grayMatrix,
|
||
|
mode));
|
||
|
}
|
||
|
|
||
|
Status ClearColorMatrices(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
ColorMatrixFlagsDefault));
|
||
|
}
|
||
|
|
||
|
Status SetThreshold(
|
||
|
IN REAL threshold,
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesThreshold(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE,
|
||
|
threshold));
|
||
|
}
|
||
|
|
||
|
Status ClearThreshold(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesThreshold(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE,
|
||
|
0.0));
|
||
|
}
|
||
|
|
||
|
Status SetGamma(
|
||
|
IN REAL gamma,
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesGamma(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE,
|
||
|
gamma));
|
||
|
}
|
||
|
|
||
|
Status ClearGamma(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesGamma(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE,
|
||
|
0.0));
|
||
|
}
|
||
|
|
||
|
Status SetNoOp(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesNoOp(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE));
|
||
|
}
|
||
|
|
||
|
Status ClearNoOp(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesNoOp(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE));
|
||
|
}
|
||
|
|
||
|
Status SetColorKey(
|
||
|
IN const Color& colorLow,
|
||
|
IN const Color& colorHigh,
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesColorKeys(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE,
|
||
|
colorLow.GetValue(),
|
||
|
colorHigh.GetValue()));
|
||
|
}
|
||
|
|
||
|
Status ClearColorKey(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesColorKeys(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE,
|
||
|
NULL,
|
||
|
NULL));
|
||
|
}
|
||
|
|
||
|
Status SetOutputChannel(
|
||
|
IN ColorChannelFlags channelFlags,
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesOutputChannel(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE,
|
||
|
channelFlags));
|
||
|
}
|
||
|
|
||
|
Status ClearOutputChannel(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesOutputChannel(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE,
|
||
|
ColorChannelFlagsLast));
|
||
|
}
|
||
|
|
||
|
Status SetOutputChannelColorProfile(
|
||
|
IN const WCHAR *colorProfileFilename,
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE,
|
||
|
colorProfileFilename));
|
||
|
}
|
||
|
|
||
|
Status ClearOutputChannelColorProfile(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE,
|
||
|
NULL));
|
||
|
}
|
||
|
|
||
|
Status SetRemapTable(
|
||
|
IN UINT mapSize,
|
||
|
IN const ColorMap *map,
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesRemapTable(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
TRUE,
|
||
|
mapSize,
|
||
|
map));
|
||
|
}
|
||
|
|
||
|
Status ClearRemapTable(
|
||
|
IN ColorAdjustType type = ColorAdjustTypeDefault
|
||
|
)
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesRemapTable(
|
||
|
nativeImageAttr,
|
||
|
type,
|
||
|
FALSE,
|
||
|
0,
|
||
|
NULL));
|
||
|
}
|
||
|
|
||
|
Status SetBrushRemapTable(IN UINT mapSize,
|
||
|
IN const ColorMap *map)
|
||
|
{
|
||
|
return this->SetRemapTable(mapSize, map, ColorAdjustTypeBrush);
|
||
|
}
|
||
|
|
||
|
Status ClearBrushRemapTable()
|
||
|
{
|
||
|
return this->ClearRemapTable(ColorAdjustTypeBrush);
|
||
|
}
|
||
|
|
||
|
Status SetWrapMode(IN WrapMode wrap,
|
||
|
IN const Color& color = Color(),
|
||
|
IN BOOL clamp = FALSE)
|
||
|
{
|
||
|
ARGB argb = color.GetValue();
|
||
|
|
||
|
return SetStatus(DllExports::GdipSetImageAttributesWrapMode(
|
||
|
nativeImageAttr, wrap, argb, clamp));
|
||
|
}
|
||
|
|
||
|
// The flags of the palette are ignored.
|
||
|
|
||
|
Status GetAdjustedPalette(IN OUT ColorPalette* colorPalette,
|
||
|
IN ColorAdjustType colorAdjustType) const
|
||
|
{
|
||
|
return SetStatus(DllExports::GdipGetImageAttributesAdjustedPalette(
|
||
|
nativeImageAttr, colorPalette, colorAdjustType));
|
||
|
}
|
||
|
|
||
|
Status GetLastStatus() const
|
||
|
{
|
||
|
Status lastStatus = lastResult;
|
||
|
lastResult = Ok;
|
||
|
|
||
|
return lastStatus;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
ImageAttributes(const ImageAttributes &);
|
||
|
ImageAttributes& operator=(const ImageAttributes &);
|
||
|
|
||
|
protected:
|
||
|
ImageAttributes(GpImageAttributes* imageAttr, Status status)
|
||
|
{
|
||
|
SetNativeImageAttr(imageAttr);
|
||
|
lastResult = status;
|
||
|
}
|
||
|
|
||
|
VOID SetNativeImageAttr(GpImageAttributes* nativeImageAttr)
|
||
|
{
|
||
|
this->nativeImageAttr = nativeImageAttr;
|
||
|
}
|
||
|
|
||
|
Status SetStatus(Status status) const
|
||
|
{
|
||
|
if (status != Ok)
|
||
|
return (lastResult = status);
|
||
|
else
|
||
|
return status;
|
||
|
}
|
||
|
|
||
|
protected:
|
||
|
GpImageAttributes* nativeImageAttr;
|
||
|
mutable Status lastResult;
|
||
|
};
|
||
|
|
||
|
#endif
|