Home | History | Annotate | Download | only in gdiplus
      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 (at) 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 
     33 class ImageAttributes: public GdiplusBase
     34 {
     35 	friend class Graphics;
     36 	friend class TextureBrush;
     37 
     38 public:
     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 
    219 private:
    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 */
    237