1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**************************************************************************\
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Module Name:
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*   Image Attributes
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov* Abstract:
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*   Class for color adjustment object passed to Graphics.DrawImage
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov\**************************************************************************/
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _GDIPLUSIMAGEATTRIBUTES_H
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _GDIPLUSIMAGEATTRIBUTES_H
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass GpImageAttributes;
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// There are 5 possible sets of color adjustments:
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//          ColorAdjustDefault,
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//          ColorAdjustBitmap,
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//          ColorAdjustBrush,
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//          ColorAdjustPen,
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//          ColorAdjustText,
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Bitmaps, Brushes, Pens, and Text will all use any color adjustments
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// that have been set into the default ImageAttributes until their own
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// color adjustments have been set.  So as soon as any "Set" method is
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// called for Bitmaps, Brushes, Pens, or Text, then they start from
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// scratch with only the color adjustments that have been set for them.
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Calling Reset removes any individual color adjustments for a type
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// and makes it revert back to using all the default color adjustments
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// (if any).  The SetToIdentity method is a way to force a type to
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// have no color adjustments at all, regardless of what previous adjustments
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// have been set for the defaults or for that type.
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass ImageAttributes : public GdiplusBase
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class Graphics;
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class TextureBrush;
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ImageAttributes()
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        nativeImageAttr = NULL;
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        lastResult = DllExports::GdipCreateImageAttributes(&nativeImageAttr);
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~ImageAttributes()
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        DllExports::GdipDisposeImageAttributes(nativeImageAttr);
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ImageAttributes* Clone() const
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        GpImageAttributes* clone;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        SetStatus(DllExports::GdipCloneImageAttributes(
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            &clone));
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return new ImageAttributes(clone, lastResult);
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    // Set to identity, regardless of what the default color adjustment is.
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    SetToIdentity(
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesToIdentity(
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type));
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    // Remove any individual color adjustments, and go back to using the default
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Reset(
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipResetImageAttributes(
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type));
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    SetColorMatrix(
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN const ColorMatrix *colorMatrix,
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorMatrixFlags mode = ColorMatrixFlagsDefault,
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE,
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            colorMatrix,
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL,
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            mode));
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearColorMatrix(
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE,
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL,
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL,
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            ColorMatrixFlagsDefault));
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    SetColorMatrices(
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN const ColorMatrix *colorMatrix,
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN const ColorMatrix *grayMatrix,
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorMatrixFlags mode = ColorMatrixFlagsDefault,
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE,
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            colorMatrix,
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            grayMatrix,
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            mode));
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearColorMatrices(
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesColorMatrix(
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE,
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL,
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL,
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            ColorMatrixFlagsDefault));
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetThreshold(
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN REAL threshold,
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesThreshold(
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE,
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            threshold));
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearThreshold(
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesThreshold(
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE,
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            0.0));
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetGamma(
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN REAL gamma,
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesGamma(
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE,
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            gamma));
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearGamma(
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesGamma(
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE,
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            0.0));
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetNoOp(
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesNoOp(
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE));
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearNoOp(
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesNoOp(
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE));
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetColorKey(
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN const Color& colorLow,
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN const Color& colorHigh,
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesColorKeys(
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE,
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            colorLow.GetValue(),
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            colorHigh.GetValue()));
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearColorKey(
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesColorKeys(
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE,
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL,
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL));
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetOutputChannel(
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorChannelFlags channelFlags,
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesOutputChannel(
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE,
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            channelFlags));
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearOutputChannel(
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesOutputChannel(
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE,
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            ColorChannelFlagsLast));
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetOutputChannelColorProfile(
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN const WCHAR *colorProfileFilename,
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE,
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            colorProfileFilename));
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearOutputChannelColorProfile(
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE,
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL));
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetRemapTable(
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN UINT mapSize,
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN const ColorMap *map,
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesRemapTable(
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            TRUE,
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            mapSize,
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            map));
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearRemapTable(
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        IN ColorAdjustType type = ColorAdjustTypeDefault
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        )
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesRemapTable(
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            nativeImageAttr,
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            type,
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            FALSE,
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            0,
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            NULL));
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetBrushRemapTable(IN UINT mapSize,
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                              IN const ColorMap *map)
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return this->SetRemapTable(mapSize, map, ColorAdjustTypeBrush);
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status ClearBrushRemapTable()
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return this->ClearRemapTable(ColorAdjustTypeBrush);
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetWrapMode(IN WrapMode wrap,
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                       IN const Color& color = Color(),
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                       IN BOOL clamp = FALSE)
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        ARGB argb = color.GetValue();
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipSetImageAttributesWrapMode(
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                           nativeImageAttr, wrap, argb, clamp));
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    #ifndef DCR_USE_NEW_145139
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetICMMode(IN BOOL on)
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        on;
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        // This is not implemented.
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        // The supported method for doing ICM conversion from the embedded
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        // ICC profile is to use the Bitmap constructor from a file or stream
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        // and specify TRUE for the useIcm parameter. This will cause the
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        // image to be ICM converted when it's loaded from the file/stream
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        // if the profile exists.
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(NotImplemented);
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//          DllExports::GdipSetImageAttributesICMMode(nativeImageAttr, on)
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    #endif
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    // The flags of the palette are ignored.
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status GetAdjustedPalette(IN OUT ColorPalette* colorPalette,
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                              IN ColorAdjustType colorAdjustType) const
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return SetStatus(DllExports::GdipGetImageAttributesAdjustedPalette(
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                           nativeImageAttr, colorPalette, colorAdjustType));
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status GetLastStatus() const
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        Status lastStatus = lastResult;
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        lastResult = Ok;
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return lastStatus;
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef DCR_USE_NEW_250932
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ImageAttributes(const ImageAttributes &);
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ImageAttributes& operator=(const ImageAttributes &);
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ImageAttributes(GpImageAttributes* imageAttr, Status status)
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        SetNativeImageAttr(imageAttr);
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        lastResult = status;
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    VOID SetNativeImageAttr(GpImageAttributes* nativeImageAttr)
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        this->nativeImageAttr = nativeImageAttr;
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    Status SetStatus(Status status) const
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        if (status != Ok)
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return (lastResult = status);
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        else
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov            return status;
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    GpImageAttributes* nativeImageAttr;
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    mutable Status lastResult;
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
398