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