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