master
  1/*
  2 * gdiplusimageattributes.h
  3 *
  4 * GDI+ ImageAttributes class
  5 *
  6 * This file is part of the w32api package.
  7 *
  8 * Contributors:
  9 *   Created by Markus Koenig <markus@stber-koenig.de>
 10 *
 11 * THIS SOFTWARE IS NOT COPYRIGHTED
 12 *
 13 * This source code is offered for use in the public domain. You may
 14 * use, modify or distribute it freely.
 15 *
 16 * This code is distributed in the hope that it will be useful but
 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 18 * DISCLAIMED. This includes but is not limited to warranties of
 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 20 *
 21 */
 22
 23#ifndef __GDIPLUS_IMAGEATTRIBUTES_H
 24#define __GDIPLUS_IMAGEATTRIBUTES_H
 25#if __GNUC__ >=3
 26#pragma GCC system_header
 27#endif
 28
 29#ifndef __cplusplus
 30#error "A C++ compiler is required to include gdiplusimageattributes.h."
 31#endif
 32
 33class ImageAttributes: public GdiplusBase
 34{
 35	friend class Graphics;
 36	friend class TextureBrush;
 37
 38public:
 39	ImageAttributes(): nativeImageAttributes(NULL), lastStatus(Ok)
 40	{
 41		lastStatus = DllExports::GdipCreateImageAttributes(
 42				&nativeImageAttributes);
 43	}
 44	~ImageAttributes()
 45	{
 46		DllExports::GdipDisposeImageAttributes(nativeImageAttributes);
 47	}
 48	ImageAttributes* Clone() const
 49	{
 50		GpImageAttributes *cloneImageAttributes = NULL;
 51		Status status = updateStatus(DllExports::GdipCloneImageAttributes(
 52				nativeImageAttributes, &cloneImageAttributes));
 53		if (status == Ok) {
 54			ImageAttributes *result = new ImageAttributes(
 55					cloneImageAttributes, lastStatus);
 56			if (!result) {
 57				DllExports::GdipDisposeImageAttributes(cloneImageAttributes);
 58				lastStatus = OutOfMemory;
 59			}
 60			return result;
 61		} else {
 62			return NULL;
 63		}
 64	}
 65
 66	Status ClearBrushRemapTable()
 67	{
 68		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
 69				nativeImageAttributes, ColorAdjustTypeBrush,
 70				FALSE, 0, NULL));
 71	}
 72	Status ClearColorKey(ColorAdjustType type = ColorAdjustTypeDefault)
 73	{
 74		return updateStatus(DllExports::GdipSetImageAttributesColorKeys(
 75				nativeImageAttributes, type, FALSE, 0, 0));
 76	}
 77	Status ClearColorMatrices(ColorAdjustType type = ColorAdjustTypeDefault)
 78	{
 79		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
 80				nativeImageAttributes, type, FALSE,
 81				NULL, NULL, ColorMatrixFlagsDefault));
 82	}
 83	Status ClearColorMatrix(ColorAdjustType type = ColorAdjustTypeDefault)
 84	{
 85		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
 86				nativeImageAttributes, type, FALSE,
 87				NULL, NULL, ColorMatrixFlagsDefault));
 88	}
 89	Status ClearGamma(ColorAdjustType type = ColorAdjustTypeDefault)
 90	{
 91		return updateStatus(DllExports::GdipSetImageAttributesGamma(
 92				nativeImageAttributes, type, FALSE, 1.0f));
 93	}
 94	Status ClearNoOp(ColorAdjustType type = ColorAdjustTypeDefault)
 95	{
 96		return updateStatus(DllExports::GdipSetImageAttributesNoOp(
 97				nativeImageAttributes, type, FALSE));
 98	}
 99	Status ClearOutputChannel(ColorAdjustType type = ColorAdjustTypeDefault)
100	{
101		return updateStatus(DllExports::GdipSetImageAttributesOutputChannel(
102				nativeImageAttributes, type, FALSE,
103				ColorChannelFlagsC));
104	}
105	Status ClearOutputChannelColorProfile(
106			ColorAdjustType type = ColorAdjustTypeDefault)
107	{
108		return updateStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
109				nativeImageAttributes, type, FALSE, NULL));
110	}
111	Status ClearRemapTable(ColorAdjustType type = ColorAdjustTypeDefault)
112	{
113		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
114				nativeImageAttributes, type, FALSE, 0, NULL));
115	}
116	Status ClearThreshold(ColorAdjustType type = ColorAdjustTypeDefault)
117	{
118		return updateStatus(DllExports::GdipSetImageAttributesThreshold(
119				nativeImageAttributes, type, FALSE, 0.0));
120	}
121	Status GetAdjustedPalette(ColorPalette *colorPalette,
122			ColorAdjustType type) const
123	{
124		return updateStatus(DllExports::GdipGetImageAttributesAdjustedPalette(
125				nativeImageAttributes, colorPalette, type));
126	}
127	Status GetLastStatus() const
128	{
129		Status result = lastStatus;
130		lastStatus = Ok;
131		return result;
132	}
133	Status Reset(ColorAdjustType type = ColorAdjustTypeDefault)
134	{
135		return updateStatus(DllExports::GdipResetImageAttributes(
136				nativeImageAttributes, type));
137	}
138	Status SetBrushRemapTable(UINT mapSize, ColorMap *map)
139	{
140		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
141				nativeImageAttributes, ColorAdjustTypeBrush,
142				TRUE, mapSize, map));
143	}
144	Status SetColorKey(const Color& colorLow, const Color& colorHigh,
145			ColorAdjustType type = ColorAdjustTypeDefault)
146	{
147		return updateStatus(DllExports::GdipSetImageAttributesColorKeys(
148				nativeImageAttributes, type, TRUE,
149				colorLow.GetValue(), colorHigh.GetValue()));
150	}
151	Status SetColorMatrices(const ColorMatrix *colorMatrix,
152			const ColorMatrix *grayMatrix,
153			ColorMatrixFlags mode = ColorMatrixFlagsDefault,
154			ColorAdjustType type = ColorAdjustTypeDefault)
155	{
156		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
157				nativeImageAttributes, type, TRUE,
158				colorMatrix, grayMatrix, mode));
159	}
160	Status SetColorMatrix(const ColorMatrix *colorMatrix,
161			ColorMatrixFlags mode = ColorMatrixFlagsDefault,
162			ColorAdjustType type = ColorAdjustTypeDefault)
163	{
164		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
165				nativeImageAttributes, type, TRUE,
166				colorMatrix, NULL, mode));
167	}
168	Status SetGamma(REAL gamma,
169			ColorAdjustType type = ColorAdjustTypeDefault)
170	{
171		return updateStatus(DllExports::GdipSetImageAttributesGamma(
172				nativeImageAttributes, type, TRUE, gamma));
173	}
174	Status SetNoOp(ColorAdjustType type = ColorAdjustTypeDefault)
175	{
176		return updateStatus(DllExports::GdipSetImageAttributesNoOp(
177				nativeImageAttributes, type, TRUE));
178	}
179	Status SetOutputChannel(ColorChannelFlags channelFlags,
180			ColorAdjustType type = ColorAdjustTypeDefault)
181	{
182		return updateStatus(DllExports::GdipSetImageAttributesOutputChannel(
183				nativeImageAttributes, type, TRUE,
184				channelFlags));
185	}
186	Status SetOutputChannelColorProfile(const WCHAR *colorProfileFilename,
187			ColorAdjustType type = ColorAdjustTypeDefault)
188	{
189		return updateStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
190				nativeImageAttributes, type, TRUE,
191				colorProfileFilename));
192	}
193	Status SetRemapTable(UINT mapSize, const ColorMap *map,
194			ColorAdjustType type = ColorAdjustTypeDefault)
195	{
196		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
197				nativeImageAttributes, type, TRUE,
198				mapSize, map));
199	}
200	Status SetThreshold(REAL threshold,
201			ColorAdjustType type = ColorAdjustTypeDefault)
202	{
203		return updateStatus(DllExports::GdipSetImageAttributesThreshold(
204				nativeImageAttributes, type, TRUE, threshold));
205	}
206	Status SetToIdentity(ColorAdjustType type = ColorAdjustTypeDefault)
207	{
208		return updateStatus(DllExports::GdipSetImageAttributesToIdentity(
209				nativeImageAttributes, type));
210	}
211	Status SetWrapMode(WrapMode wrap, const Color& color = Color(),
212			BOOL clamp = FALSE)
213	{
214		return updateStatus(DllExports::GdipSetImageAttributesWrapMode(
215				nativeImageAttributes, wrap,
216				color.GetValue(), clamp));
217	}
218
219private:
220	ImageAttributes(GpImageAttributes *imageAttributes, Status status):
221		nativeImageAttributes(imageAttributes), lastStatus(status) {}
222	ImageAttributes(const ImageAttributes&);
223	ImageAttributes& operator=(const ImageAttributes&);
224
225	Status updateStatus(Status newStatus) const
226	{
227		if (newStatus != Ok) lastStatus = newStatus;
228		return newStatus;
229	}
230
231	GpImageAttributes *nativeImageAttributes;
232	mutable Status lastStatus;
233};
234
235
236#endif /* __GDIPLUS_IMAGEATTRIBUTES_H */