gdiplusimaging.h 15.6 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450
/*
 * Copyright (C) 2007 Google (Evan Stade)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifndef _GDIPLUSIMAGING_H
#define _GDIPLUSIMAGING_H

DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatBMP,       0xb96b3cab, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatEMF,       0xb96b3cac, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatWMF,       0xb96b3cad, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatJPEG,      0xb96b3cae, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatPNG,       0xb96b3caf, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatGIF,       0xb96b3cb0, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatTIFF,      0xb96b3cb1, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatEXIF,      0xb96b3cb2, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
DEFINE_GUID(ImageFormatIcon,      0xb96b3cb5, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);

DEFINE_GUID(FrameDimensionTime,       0x6aedbd6d, 0x3fb5, 0x418a, 0x83, 0xa6, 0x7f, 0x45, 0x22, 0x9d, 0xc8, 0x72);
DEFINE_GUID(FrameDimensionPage,       0x7462dc86, 0x6180, 0x4c7e, 0x8e, 0x3f, 0xee, 0x73, 0x33, 0xa7, 0xa4, 0x83);
DEFINE_GUID(FrameDimensionResolution, 0x84236f7b, 0x3bd3, 0x428f, 0x8d, 0xab, 0x4e, 0xa1, 0x43, 0x9c, 0xa3, 0x15);

enum ImageLockMode
{
    ImageLockModeRead           = 1,
    ImageLockModeWrite          = 2,
    ImageLockModeUserInputBuf   = 4
};

enum RotateFlipType
{
    RotateNoneFlipNone = 0,
    Rotate180FlipXY    = RotateNoneFlipNone,

    Rotate90FlipNone   = 1,
    Rotate270FlipXY    = Rotate90FlipNone,

    Rotate180FlipNone  = 2,
    RotateNoneFlipXY   = Rotate180FlipNone,

    Rotate270FlipNone  = 3,
    Rotate90FlipXY     = Rotate270FlipNone,

    RotateNoneFlipX    = 4,
    Rotate180FlipY     = RotateNoneFlipX,

    Rotate90FlipX      = 5,
    Rotate270FlipY     = Rotate90FlipX,

    Rotate180FlipX     = 6,
    RotateNoneFlipY    = Rotate180FlipX,

    Rotate270FlipX     = 7,
    Rotate90FlipY      = Rotate270FlipX
};

#ifdef __cplusplus
class EncoderParameter
{
public:
    GUID    Guid;
    ULONG   NumberOfValues;
    ULONG   Type;
    VOID*   Value;
};

class EncoderParameters
{
public:
    UINT Count;
    EncoderParameter Parameter[1];
};

class ImageCodecInfo
{
public:
    CLSID Clsid;
    GUID  FormatID;
    const WCHAR* CodecName;
    const WCHAR* DllName;
    const WCHAR* FormatDescription;
    const WCHAR* FilenameExtension;
    const WCHAR* MimeType;
    DWORD Flags;
    DWORD Version;
    DWORD SigCount;
    DWORD SigSize;
    const BYTE* SigPattern;
    const BYTE* SigMask;
};

class BitmapData
{
public:
    UINT Width;
    UINT Height;
    INT Stride;
    Gdiplus::PixelFormat PixelFormat;
    VOID* Scan0;
    UINT_PTR Reserved;
};

class ImageItemData
{
public:
    UINT  Size;
    UINT  Position;
    VOID* Desc;
    UINT  DescSize;
    VOID* Data;
    UINT  DataSize;
    UINT  Cookie;
};

class PropertyItem
{
public:
    PROPID id;
    ULONG  length;
    WORD   type;
    VOID*  value;
};

#else /* end of c++ typedefs */

typedef enum ImageLockMode ImageLockMode;
typedef enum RotateFlipType RotateFlipType;

typedef struct EncoderParameter
{
    GUID Guid;
    ULONG NumberOfValues;
    ULONG Type;
    VOID* Value;
} EncoderParameter;

typedef struct EncoderParameters
{
    UINT Count;
    EncoderParameter Parameter[1];
} EncoderParameters;

typedef struct ImageCodecInfo
{
    CLSID Clsid;
    GUID  FormatID;
    const WCHAR* CodecName;
    const WCHAR* DllName;
    const WCHAR* FormatDescription;
    const WCHAR* FilenameExtension;
    const WCHAR* MimeType;
    DWORD Flags;
    DWORD Version;
    DWORD SigCount;
    DWORD SigSize;
    const BYTE* SigPattern;
    const BYTE* SigMask;
} ImageCodecInfo;

typedef struct BitmapData
{
    UINT Width;
    UINT Height;
    INT Stride;
    PixelFormat PixelFormat;
    VOID* Scan0;
    UINT_PTR Reserved; /* undocumented: stores the lock mode */
} BitmapData;

typedef struct ImageItemData
{
    UINT  Size;
    UINT  Position;
    VOID* Desc;
    UINT  DescSize;
    VOID* Data;
    UINT  DataSize;
    UINT  Cookie;
} ImageItemData;

typedef struct PropertyItem
{
    PROPID id;
    ULONG  length;
    WORD   type;
    VOID*  value;
} PropertyItem;

#endif /* end of c typedefs */

/* property types */
#define PropertyTagTypeByte       1
#define PropertyTagTypeASCII      2
#define PropertyTagTypeShort      3
#define PropertyTagTypeLong       4
#define PropertyTagTypeRational   5
#define PropertyTagTypeUndefined  7
#define PropertyTagTypeSLONG      9
#define PropertyTagTypeSRational 10

/* property IDs */
#define PropertyTagExifIFD                0x8769
#define PropertyTagGpsIFD                 0x8825

#define PropertyTagNewSubfileType         0x00FE
#define PropertyTagSubfileType            0x00FF
#define PropertyTagImageWidth             0x0100
#define PropertyTagImageHeight            0x0101
#define PropertyTagBitsPerSample          0x0102
#define PropertyTagCompression            0x0103
#define PropertyTagPhotometricInterp      0x0106
#define PropertyTagThreshHolding          0x0107
#define PropertyTagCellWidth              0x0108
#define PropertyTagCellHeight             0x0109
#define PropertyTagFillOrder              0x010A
#define PropertyTagDocumentName           0x010D
#define PropertyTagImageDescription       0x010E
#define PropertyTagEquipMake              0x010F
#define PropertyTagEquipModel             0x0110
#define PropertyTagStripOffsets           0x0111
#define PropertyTagOrientation            0x0112
#define PropertyTagSamplesPerPixel        0x0115
#define PropertyTagRowsPerStrip           0x0116
#define PropertyTagStripBytesCount        0x0117
#define PropertyTagMinSampleValue         0x0118
#define PropertyTagMaxSampleValue         0x0119
#define PropertyTagXResolution            0x011A
#define PropertyTagYResolution            0x011B
#define PropertyTagPlanarConfig           0x011C
#define PropertyTagPageName               0x011D
#define PropertyTagXPosition              0x011E
#define PropertyTagYPosition              0x011F
#define PropertyTagFreeOffset             0x0120
#define PropertyTagFreeByteCounts         0x0121
#define PropertyTagGrayResponseUnit       0x0122
#define PropertyTagGrayResponseCurve      0x0123
#define PropertyTagT4Option               0x0124
#define PropertyTagT6Option               0x0125
#define PropertyTagResolutionUnit         0x0128
#define PropertyTagPageNumber             0x0129
#define PropertyTagTransferFuncition      0x012D
#define PropertyTagSoftwareUsed           0x0131
#define PropertyTagDateTime               0x0132
#define PropertyTagArtist                 0x013B
#define PropertyTagHostComputer           0x013C
#define PropertyTagPredictor              0x013D
#define PropertyTagWhitePoint             0x013E
#define PropertyTagPrimaryChromaticities  0x013F
#define PropertyTagColorMap               0x0140
#define PropertyTagHalftoneHints          0x0141
#define PropertyTagTileWidth              0x0142
#define PropertyTagTileLength             0x0143
#define PropertyTagTileOffset             0x0144
#define PropertyTagTileByteCounts         0x0145
#define PropertyTagInkSet                 0x014C
#define PropertyTagInkNames               0x014D
#define PropertyTagNumberOfInks           0x014E
#define PropertyTagDotRange               0x0150
#define PropertyTagTargetPrinter          0x0151
#define PropertyTagExtraSamples           0x0152
#define PropertyTagSampleFormat           0x0153
#define PropertyTagSMinSampleValue        0x0154
#define PropertyTagSMaxSampleValue        0x0155
#define PropertyTagTransferRange          0x0156

#define PropertyTagJPEGProc               0x0200
#define PropertyTagJPEGInterFormat        0x0201
#define PropertyTagJPEGInterLength        0x0202
#define PropertyTagJPEGRestartInterval    0x0203
#define PropertyTagJPEGLosslessPredictors 0x0205
#define PropertyTagJPEGPointTransforms    0x0206
#define PropertyTagJPEGQTables            0x0207
#define PropertyTagJPEGDCTables           0x0208
#define PropertyTagJPEGACTables           0x0209

#define PropertyTagYCbCrCoefficients      0x0211
#define PropertyTagYCbCrSubsampling       0x0212
#define PropertyTagYCbCrPositioning       0x0213
#define PropertyTagREFBlackWhite          0x0214

#define PropertyTagICCProfile          0x8773

#define PropertyTagGamma                0x0301
#define PropertyTagICCProfileDescriptor 0x0302
#define PropertyTagSRGBRenderingIntent  0x0303

#define PropertyTagImageTitle          0x0320
#define PropertyTagCopyright           0x8298

#define PropertyTagResolutionXUnit            0x5001
#define PropertyTagResolutionYUnit            0x5002
#define PropertyTagResolutionXLengthUnit      0x5003
#define PropertyTagResolutionYLengthUnit      0x5004
#define PropertyTagPrintFlags                 0x5005
#define PropertyTagPrintFlagsVersion          0x5006
#define PropertyTagPrintFlagsCrop             0x5007
#define PropertyTagPrintFlagsBleedWidth       0x5008
#define PropertyTagPrintFlagsBleedWidthScale  0x5009
#define PropertyTagHalftoneLPI                0x500A
#define PropertyTagHalftoneLPIUnit            0x500B
#define PropertyTagHalftoneDegree             0x500C
#define PropertyTagHalftoneShape              0x500D
#define PropertyTagHalftoneMisc               0x500E
#define PropertyTagHalftoneScreen             0x500F
#define PropertyTagJPEGQuality                0x5010
#define PropertyTagGridSize                   0x5011
#define PropertyTagThumbnailFormat            0x5012
#define PropertyTagThumbnailWidth             0x5013
#define PropertyTagThumbnailHeight            0x5014
#define PropertyTagThumbnailColorDepth        0x5015
#define PropertyTagThumbnailPlanes            0x5016
#define PropertyTagThumbnailRawBytes          0x5017
#define PropertyTagThumbnailSize              0x5018
#define PropertyTagThumbnailCompressedSize    0x5019
#define PropertyTagColorTransferFunction      0x501A
#define PropertyTagThumbnailData              0x501B

#define PropertyTagThumbnailImageWidth        0x5020
#define PropertyTagThumbnailImageHeight       0x5021
#define PropertyTagThumbnailBitsPerSample     0x5022
#define PropertyTagThumbnailCompression       0x5023
#define PropertyTagThumbnailPhotometricInterp 0x5024
#define PropertyTagThumbnailImageDescription  0x5025
#define PropertyTagThumbnailEquipMake         0x5026
#define PropertyTagThumbnailEquipModel        0x5027
#define PropertyTagThumbnailStripOffsets      0x5028
#define PropertyTagThumbnailOrientation       0x5029
#define PropertyTagThumbnailSamplesPerPixel   0x502A
#define PropertyTagThumbnailRowsPerStrip      0x502B
#define PropertyTagThumbnailStripBytesCount   0x502C
#define PropertyTagThumbnailResolutionX       0x502D
#define PropertyTagThumbnailResolutionY       0x502E
#define PropertyTagThumbnailPlanarConfig      0x502F
#define PropertyTagThumbnailResolutionUnit    0x5030
#define PropertyTagThumbnailTransferFunction  0x5031
#define PropertyTagThumbnailSoftwareUsed      0x5032
#define PropertyTagThumbnailDateTime          0x5033
#define PropertyTagThumbnailArtist            0x5034
#define PropertyTagThumbnailWhitePoint        0x5035
#define PropertyTagThumbnailPrimaryChromaticities 0x5036
#define PropertyTagThumbnailYCbCrCoefficients 0x5037
#define PropertyTagThumbnailYCbCrSubsampling  0x5038
#define PropertyTagThumbnailYCbCrPositioning  0x5039
#define PropertyTagThumbnailRefBlackWhite     0x503A
#define PropertyTagThumbnailCopyRight         0x503B

#define PropertyTagLuminanceTable    0x5090
#define PropertyTagChrominanceTable  0x5091

#define PropertyTagFrameDelay        0x5100
#define PropertyTagLoopCount         0x5101

#define PropertyTagPixelUnit         0x5110
#define PropertyTagPixelPerUnitX     0x5111
#define PropertyTagPixelPerUnitY     0x5112
#define PropertyTagPaletteHistogram  0x5113

#define PropertyTagExifExposureTime  0x829A
#define PropertyTagExifFNumber       0x829D

#define PropertyTagExifExposureProg  0x8822
#define PropertyTagExifSpectralSense 0x8824
#define PropertyTagExifISOSpeed      0x8827
#define PropertyTagExifOECF          0x8828

#define PropertyTagExifVer           0x9000
#define PropertyTagExifDTOrig        0x9003
#define PropertyTagExifDTDigitized   0x9004

#define PropertyTagExifCompConfig    0x9101
#define PropertyTagExifCompBPP       0x9102

#define PropertyTagExifShutterSpeed  0x9201
#define PropertyTagExifAperture      0x9202
#define PropertyTagExifBrightness    0x9203
#define PropertyTagExifExposureBias  0x9204
#define PropertyTagExifMaxAperture   0x9205
#define PropertyTagExifSubjectDist   0x9206
#define PropertyTagExifMeteringMode  0x9207
#define PropertyTagExifLightSource   0x9208
#define PropertyTagExifFlash         0x9209
#define PropertyTagExifFocalLength   0x920A
#define PropertyTagExifMakerNote     0x927C
#define PropertyTagExifUserComment   0x9286
#define PropertyTagExifDTSubsec      0x9290
#define PropertyTagExifDTOrigSS      0x9291
#define PropertyTagExifDTDigSS       0x9292

#define PropertyTagExifFPXVer        0xA000
#define PropertyTagExifColorSpace    0xA001
#define PropertyTagExifPixXDim       0xA002
#define PropertyTagExifPixYDim       0xA003
#define PropertyTagExifRelatedWav    0xA004
#define PropertyTagExifInterop       0xA005
#define PropertyTagExifFlashEnergy   0xA20B
#define PropertyTagExifSpatialFR     0xA20C
#define PropertyTagExifFocalXRes     0xA20E
#define PropertyTagExifFocalYRes     0xA20F
#define PropertyTagExifFocalResUnit  0xA210
#define PropertyTagExifSubjectLoc    0xA214
#define PropertyTagExifExposureIndex 0xA215
#define PropertyTagExifSensingMethod 0xA217
#define PropertyTagExifFileSource    0xA300
#define PropertyTagExifSceneType     0xA301
#define PropertyTagExifCfaPattern    0xA302

#define PropertyTagGpsVer            0x0000
#define PropertyTagGpsLatitudeRef    0x0001
#define PropertyTagGpsLatitude       0x0002
#define PropertyTagGpsLongitudeRef   0x0003
#define PropertyTagGpsLongitude      0x0004
#define PropertyTagGpsAltitudeRef    0x0005
#define PropertyTagGpsAltitude       0x0006
#define PropertyTagGpsGpsTime        0x0007
#define PropertyTagGpsGpsSatellites  0x0008
#define PropertyTagGpsGpsStatus      0x0009
#define PropertyTagGpsGpsMeasureMode 0x000A
#define PropertyTagGpsGpsDop         0x000B
#define PropertyTagGpsSpeedRef       0x000C
#define PropertyTagGpsSpeed          0x000D
#define PropertyTagGpsTrackRef       0x000E
#define PropertyTagGpsTrack          0x000F
#define PropertyTagGpsImgDirRef      0x0010
#define PropertyTagGpsImgDir         0x0011
#define PropertyTagGpsMapDatum       0x0012
#define PropertyTagGpsDestLatRef     0x0013
#define PropertyTagGpsDestLat        0x0014
#define PropertyTagGpsDestLongRef    0x0015
#define PropertyTagGpsDestLong       0x0016
#define PropertyTagGpsDestBearRef    0x0017
#define PropertyTagGpsDestBear       0x0018
#define PropertyTagGpsDestDistRef    0x0019
#define PropertyTagGpsDestDist       0x001A

#endif /* _GDIPLUSIMAGING_H */