/**************************************************************************\ * * 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