summaryrefslogtreecommitdiff
path: root/external/wine/include/gdiplusimaging.h
blob: 7c199c3d5bdfffce6b75940a11cecc695b212f80 (plain)
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 */