|
|
/**************************************************************************\
* * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved. * * Module Name: * * Image Attributes * * Abstract: * * Class for color adjustment object passed to Graphics.DrawImage * * Revision History: * * 15-Nov-1999 gilmanw * Created it. * \**************************************************************************/
#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 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; }
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
|