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