/**************************************************************************\ | |
* | |
* Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. | |
* | |
* Module Name: | |
* | |
* Image Attributes | |
* | |
* Abstract: | |
* | |
* Class for color adjustment object passed to Graphics.DrawImage | |
* | |
\**************************************************************************/ | |
#ifndef _GDIPLUSIMAGEATTRIBUTES_H | |
#define _GDIPLUSIMAGEATTRIBUTES_H | |
class GpImageAttributes; | |
// 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. | |
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); | |
} | |
// Set to identity, regardless of what the default color adjustment is. | |
Status | |
SetToIdentity( | |
IN ColorAdjustType type = ColorAdjustTypeDefault | |
) | |
{ | |
return SetStatus(DllExports::GdipSetImageAttributesToIdentity( | |
nativeImageAttr, | |
type)); | |
} | |
// Remove any individual color adjustments, and go back to using the default | |
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)); | |
} | |
#ifndef DCR_USE_NEW_145139 | |
Status SetICMMode(IN BOOL on) | |
{ | |
on; | |
// This is not implemented. | |
// The supported method for doing ICM conversion from the embedded | |
// ICC profile is to use the Bitmap constructor from a file or stream | |
// and specify TRUE for the useIcm parameter. This will cause the | |
// image to be ICM converted when it's loaded from the file/stream | |
// if the profile exists. | |
return SetStatus(NotImplemented); | |
// DllExports::GdipSetImageAttributesICMMode(nativeImageAttr, on) | |
} | |
#endif | |
// 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; | |
} | |
#ifdef DCR_USE_NEW_250932 | |
private: | |
ImageAttributes(const ImageAttributes &); | |
ImageAttributes& operator=(const ImageAttributes &); | |
#endif | |
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 |