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