| /* | 
 |  * gdiplusimageattributes.h | 
 |  * | 
 |  * GDI+ ImageAttributes class | 
 |  * | 
 |  * This file is part of the w32api package. | 
 |  * | 
 |  * Contributors: | 
 |  *   Created by Markus Koenig <markus@stber-koenig.de> | 
 |  * | 
 |  * THIS SOFTWARE IS NOT COPYRIGHTED | 
 |  * | 
 |  * This source code is offered for use in the public domain. You may | 
 |  * use, modify or distribute it freely. | 
 |  * | 
 |  * This code is distributed in the hope that it will be useful but | 
 |  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY | 
 |  * DISCLAIMED. This includes but is not limited to warranties of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
 |  * | 
 |  */ | 
 |  | 
 | #ifndef __GDIPLUS_IMAGEATTRIBUTES_H | 
 | #define __GDIPLUS_IMAGEATTRIBUTES_H | 
 | #if __GNUC__ >=3 | 
 | #pragma GCC system_header | 
 | #endif | 
 |  | 
 | #ifndef __cplusplus | 
 | #error "A C++ compiler is required to include gdiplusimageattributes.h." | 
 | #endif | 
 |  | 
 | class ImageAttributes: public GdiplusBase | 
 | { | 
 | 	friend class Graphics; | 
 | 	friend class TextureBrush; | 
 |  | 
 | public: | 
 | 	ImageAttributes(): nativeImageAttributes(NULL), lastStatus(Ok) | 
 | 	{ | 
 | 		lastStatus = DllExports::GdipCreateImageAttributes( | 
 | 				&nativeImageAttributes); | 
 | 	} | 
 | 	~ImageAttributes() | 
 | 	{ | 
 | 		DllExports::GdipDisposeImageAttributes(nativeImageAttributes); | 
 | 	} | 
 | 	ImageAttributes* Clone() const | 
 | 	{ | 
 | 		GpImageAttributes *cloneImageAttributes = NULL; | 
 | 		Status status = updateStatus(DllExports::GdipCloneImageAttributes( | 
 | 				nativeImageAttributes, &cloneImageAttributes)); | 
 | 		if (status == Ok) { | 
 | 			ImageAttributes *result = new ImageAttributes( | 
 | 					cloneImageAttributes, lastStatus); | 
 | 			if (!result) { | 
 | 				DllExports::GdipDisposeImageAttributes(cloneImageAttributes); | 
 | 				lastStatus = OutOfMemory; | 
 | 			} | 
 | 			return result; | 
 | 		} else { | 
 | 			return NULL; | 
 | 		} | 
 | 	} | 
 |  | 
 | 	Status ClearBrushRemapTable() | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesRemapTable( | 
 | 				nativeImageAttributes, ColorAdjustTypeBrush, | 
 | 				FALSE, 0, NULL)); | 
 | 	} | 
 | 	Status ClearColorKey(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesColorKeys( | 
 | 				nativeImageAttributes, type, FALSE, 0, 0)); | 
 | 	} | 
 | 	Status ClearColorMatrices(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix( | 
 | 				nativeImageAttributes, type, FALSE, | 
 | 				NULL, NULL, ColorMatrixFlagsDefault)); | 
 | 	} | 
 | 	Status ClearColorMatrix(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix( | 
 | 				nativeImageAttributes, type, FALSE, | 
 | 				NULL, NULL, ColorMatrixFlagsDefault)); | 
 | 	} | 
 | 	Status ClearGamma(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesGamma( | 
 | 				nativeImageAttributes, type, FALSE, 1.0f)); | 
 | 	} | 
 | 	Status ClearNoOp(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesNoOp( | 
 | 				nativeImageAttributes, type, FALSE)); | 
 | 	} | 
 | 	Status ClearOutputChannel(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesOutputChannel( | 
 | 				nativeImageAttributes, type, FALSE, | 
 | 				ColorChannelFlagsC)); | 
 | 	} | 
 | 	Status ClearOutputChannelColorProfile( | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile( | 
 | 				nativeImageAttributes, type, FALSE, NULL)); | 
 | 	} | 
 | 	Status ClearRemapTable(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesRemapTable( | 
 | 				nativeImageAttributes, type, FALSE, 0, NULL)); | 
 | 	} | 
 | 	Status ClearThreshold(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesThreshold( | 
 | 				nativeImageAttributes, type, FALSE, 0.0)); | 
 | 	} | 
 | 	Status GetAdjustedPalette(ColorPalette *colorPalette, | 
 | 			ColorAdjustType type) const | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipGetImageAttributesAdjustedPalette( | 
 | 				nativeImageAttributes, colorPalette, type)); | 
 | 	} | 
 | 	Status GetLastStatus() const | 
 | 	{ | 
 | 		Status result = lastStatus; | 
 | 		lastStatus = Ok; | 
 | 		return result; | 
 | 	} | 
 | 	Status Reset(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipResetImageAttributes( | 
 | 				nativeImageAttributes, type)); | 
 | 	} | 
 | 	Status SetBrushRemapTable(UINT mapSize, ColorMap *map) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesRemapTable( | 
 | 				nativeImageAttributes, ColorAdjustTypeBrush, | 
 | 				TRUE, mapSize, map)); | 
 | 	} | 
 | 	Status SetColorKey(const Color& colorLow, const Color& colorHigh, | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesColorKeys( | 
 | 				nativeImageAttributes, type, TRUE, | 
 | 				colorLow.GetValue(), colorHigh.GetValue())); | 
 | 	} | 
 | 	Status SetColorMatrices(const ColorMatrix *colorMatrix, | 
 | 			const ColorMatrix *grayMatrix, | 
 | 			ColorMatrixFlags mode = ColorMatrixFlagsDefault, | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix( | 
 | 				nativeImageAttributes, type, TRUE, | 
 | 				colorMatrix, grayMatrix, mode)); | 
 | 	} | 
 | 	Status SetColorMatrix(const ColorMatrix *colorMatrix, | 
 | 			ColorMatrixFlags mode = ColorMatrixFlagsDefault, | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix( | 
 | 				nativeImageAttributes, type, TRUE, | 
 | 				colorMatrix, NULL, mode)); | 
 | 	} | 
 | 	Status SetGamma(REAL gamma, | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesGamma( | 
 | 				nativeImageAttributes, type, TRUE, gamma)); | 
 | 	} | 
 | 	Status SetNoOp(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesNoOp( | 
 | 				nativeImageAttributes, type, TRUE)); | 
 | 	} | 
 | 	Status SetOutputChannel(ColorChannelFlags channelFlags, | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesOutputChannel( | 
 | 				nativeImageAttributes, type, TRUE, | 
 | 				channelFlags)); | 
 | 	} | 
 | 	Status SetOutputChannelColorProfile(const WCHAR *colorProfileFilename, | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile( | 
 | 				nativeImageAttributes, type, TRUE, | 
 | 				colorProfileFilename)); | 
 | 	} | 
 | 	Status SetRemapTable(UINT mapSize, const ColorMap *map, | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesRemapTable( | 
 | 				nativeImageAttributes, type, TRUE, | 
 | 				mapSize, map)); | 
 | 	} | 
 | 	Status SetThreshold(REAL threshold, | 
 | 			ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesThreshold( | 
 | 				nativeImageAttributes, type, TRUE, threshold)); | 
 | 	} | 
 | 	Status SetToIdentity(ColorAdjustType type = ColorAdjustTypeDefault) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesToIdentity( | 
 | 				nativeImageAttributes, type)); | 
 | 	} | 
 | 	Status SetWrapMode(WrapMode wrap, const Color& color = Color(), | 
 | 			BOOL clamp = FALSE) | 
 | 	{ | 
 | 		return updateStatus(DllExports::GdipSetImageAttributesWrapMode( | 
 | 				nativeImageAttributes, wrap, | 
 | 				color.GetValue(), clamp)); | 
 | 	} | 
 |  | 
 | private: | 
 | 	ImageAttributes(GpImageAttributes *imageAttributes, Status status): | 
 | 		nativeImageAttributes(imageAttributes), lastStatus(status) {} | 
 | 	ImageAttributes(const ImageAttributes&); | 
 | 	ImageAttributes& operator=(const ImageAttributes&); | 
 |  | 
 | 	Status updateStatus(Status newStatus) const | 
 | 	{ | 
 | 		if (newStatus != Ok) lastStatus = newStatus; | 
 | 		return newStatus; | 
 | 	} | 
 |  | 
 | 	GpImageAttributes *nativeImageAttributes; | 
 | 	mutable Status lastStatus; | 
 | }; | 
 |  | 
 |  | 
 | #endif /* __GDIPLUS_IMAGEATTRIBUTES_H */ |