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