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