include: Add partial propsys header.
[wine] / include / gdiplusimaging.h
1 /*
2  * Copyright (C) 2007 Google (Evan Stade)
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #ifndef _GDIPLUSIMAGING_H
20 #define _GDIPLUSIMAGING_H
21
22 DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
23 DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
24 DEFINE_GUID(ImageFormatBMP,       0xb96b3cab, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
25 DEFINE_GUID(ImageFormatEMF,       0xb96b3cac, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
26 DEFINE_GUID(ImageFormatWMF,       0xb96b3cad, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
27 DEFINE_GUID(ImageFormatJPEG,      0xb96b3cae, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
28 DEFINE_GUID(ImageFormatPNG,       0xb96b3caf, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
29 DEFINE_GUID(ImageFormatGIF,       0xb96b3cb0, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
30 DEFINE_GUID(ImageFormatTIFF,      0xb96b3cb1, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
31 DEFINE_GUID(ImageFormatEXIF,      0xb96b3cb2, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
32 DEFINE_GUID(ImageFormatIcon,      0xb96b3cb5, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
33
34 enum ImageLockMode
35 {
36     ImageLockModeRead           = 1,
37     ImageLockModeWrite          = 2,
38     ImageLockModeUserInputBuf   = 4
39 };
40
41 enum RotateFlipType
42 {
43     RotateNoneFlipNone = 0,
44     Rotate180FlipXY    = RotateNoneFlipNone,
45
46     Rotate90FlipNone   = 1,
47     Rotate270FlipXY    = Rotate90FlipNone,
48
49     Rotate180FlipNone  = 2,
50     RotateNoneFlipXY   = Rotate180FlipNone,
51
52     Rotate270FlipNone  = 3,
53     Rotate90FlipXY     = Rotate270FlipNone,
54
55     RotateNoneFlipX    = 4,
56     Rotate180FlipY     = RotateNoneFlipX,
57
58     Rotate90FlipX      = 5,
59     Rotate270FlipY     = Rotate90FlipX,
60
61     Rotate180FlipX     = 6,
62     RotateNoneFlipY    = Rotate180FlipX,
63
64     Rotate270FlipX     = 7,
65     Rotate90FlipY      = Rotate270FlipX
66 };
67
68 #ifdef __cplusplus
69 class EncoderParameter
70 {
71 public:
72     GUID    Guid;
73     ULONG   NumberOfValues;
74     ULONG   Type;
75     VOID*   Value;
76 };
77
78 class EncoderParameters
79 {
80 public:
81     UINT Count;
82     EncoderParameter Parameter[1];
83 };
84
85 class ImageCodecInfo
86 {
87 public:
88     CLSID Clsid;
89     GUID  FormatID;
90     const WCHAR* CodecName;
91     const WCHAR* DllName;
92     const WCHAR* FormatDescription;
93     const WCHAR* FilenameExtension;
94     const WCHAR* MimeType;
95     DWORD Flags;
96     DWORD Version;
97     DWORD SigCount;
98     DWORD SigSize;
99     const BYTE* SigPattern;
100     const BYTE* SigMask;
101 };
102
103 class BitmapData
104 {
105 public:
106     UINT Width;
107     UINT Height;
108     INT Stride;
109     PixelFormat PixelFormat;
110     VOID* Scan0;
111     UINT_PTR Reserved;
112 };
113
114 class ImageItemData
115 {
116 public:
117     UINT  Size;
118     UINT  Position;
119     VOID* Desc;
120     UINT  DescSize;
121     VOID* Data;
122     UINT  DataSize;
123     UINT  Cookie;
124 };
125
126 class PropertyItem
127 {
128 public:
129     PROPID id;
130     ULONG  length;
131     WORD   type;
132     VOID*  value;
133 };
134
135 #else /* end of c++ typedefs */
136
137 typedef enum ImageLockMode ImageLockMode;
138 typedef enum RotateFlipType RotateFlipType;
139
140 typedef struct EncoderParameter
141 {
142     GUID Guid;
143     ULONG NumberOfValues;
144     ULONG Type;
145     VOID* Value;
146 } EncoderParameter;
147
148 typedef struct EncoderParameters
149 {
150     UINT Count;
151     EncoderParameter Parameter[1];
152 } EncoderParameters;
153
154 typedef struct ImageCodecInfo
155 {
156     CLSID Clsid;
157     GUID  FormatID;
158     const WCHAR* CodecName;
159     const WCHAR* DllName;
160     const WCHAR* FormatDescription;
161     const WCHAR* FilenameExtension;
162     const WCHAR* MimeType;
163     DWORD Flags;
164     DWORD Version;
165     DWORD SigCount;
166     DWORD SigSize;
167     const BYTE* SigPattern;
168     const BYTE* SigMask;
169 } ImageCodecInfo;
170
171 typedef struct BitmapData
172 {
173     UINT Width;
174     UINT Height;
175     INT Stride;
176     PixelFormat PixelFormat;
177     VOID* Scan0;
178     UINT_PTR Reserved; /* undocumented: stores the lock mode */
179 } BitmapData;
180
181 typedef struct ImageItemData
182 {
183     UINT  Size;
184     UINT  Position;
185     VOID* Desc;
186     UINT  DescSize;
187     VOID* Data;
188     UINT  DataSize;
189     UINT  Cookie;
190 } ImageItemData;
191
192 typedef struct PropertyItem
193 {
194     PROPID id;
195     ULONG  length;
196     WORD   type;
197     VOID*  value;
198 } PropertyItem;
199
200 #endif /* end of c typedefs */
201
202 /* property types */
203 #define PropertyTagTypeByte       1
204 #define PropertyTagTypeASCII      2
205 #define PropertyTagTypeShort      3
206 #define PropertyTagTypeLong       4
207 #define PropertyTagTypeRational   5
208 #define PropertyTagTypeUndefined  7
209 #define PropertyTagTypeSLONG      9
210 #define PropertyTagTypeSRational 10
211
212 /* property IDs */
213 #define PropertyTagExifIFD                0x8769
214 #define PropertyTagGpsIFD                 0x8825
215
216 #define PropertyTagNewSubfileType         0x00FE
217 #define PropertyTagSubfileType            0x00FF
218 #define PropertyTagImageWidth             0x0100
219 #define PropertyTagImageHeight            0x0101
220 #define PropertyTagBitsPerSample          0x0102
221 #define PropertyTagCompression            0x0103
222 #define PropertyTagPhotometricInterp      0x0106
223 #define PropertyTagThreshHolding          0x0107
224 #define PropertyTagCellWidth              0x0108
225 #define PropertyTagCellHeight             0x0109
226 #define PropertyTagFillOrder              0x010A
227 #define PropertyTagDocumentName           0x010D
228 #define PropertyTagImageDescription       0x010E
229 #define PropertyTagEquipMake              0x010F
230 #define PropertyTagEquipModel             0x0110
231 #define PropertyTagStripOffsets           0x0111
232 #define PropertyTagOrientation            0x0112
233 #define PropertyTagSamplesPerPixel        0x0115
234 #define PropertyTagRowsPerStrip           0x0116
235 #define PropertyTagStripBytesCount        0x0117
236 #define PropertyTagMinSampleValue         0x0118
237 #define PropertyTagMaxSampleValue         0x0119
238 #define PropertyTagXResolution            0x011A
239 #define PropertyTagYResolution            0x011B
240 #define PropertyTagPlanarConfig           0x011C
241 #define PropertyTagPageName               0x011D
242 #define PropertyTagXPosition              0x011E
243 #define PropertyTagYPosition              0x011F
244 #define PropertyTagFreeOffset             0x0120
245 #define PropertyTagFreeByteCounts         0x0121
246 #define PropertyTagGrayResponseUnit       0x0122
247 #define PropertyTagGrayResponseCurve      0x0123
248 #define PropertyTagT4Option               0x0124
249 #define PropertyTagT6Option               0x0125
250 #define PropertyTagResolutionUnit         0x0128
251 #define PropertyTagPageNumber             0x0129
252 #define PropertyTagTransferFuncition      0x012D
253 #define PropertyTagSoftwareUsed           0x0131
254 #define PropertyTagDateTime               0x0132
255 #define PropertyTagArtist                 0x013B
256 #define PropertyTagHostComputer           0x013C
257 #define PropertyTagPredictor              0x013D
258 #define PropertyTagWhitePoint             0x013E
259 #define PropertyTagPrimaryChromaticities  0x013F
260 #define PropertyTagColorMap               0x0140
261 #define PropertyTagHalftoneHints          0x0141
262 #define PropertyTagTileWidth              0x0142
263 #define PropertyTagTileLength             0x0143
264 #define PropertyTagTileOffset             0x0144
265 #define PropertyTagTileByteCounts         0x0145
266 #define PropertyTagInkSet                 0x014C
267 #define PropertyTagInkNames               0x014D
268 #define PropertyTagNumberOfInks           0x014E
269 #define PropertyTagDotRange               0x0150
270 #define PropertyTagTargetPrinter          0x0151
271 #define PropertyTagExtraSamples           0x0152
272 #define PropertyTagSampleFormat           0x0153
273 #define PropertyTagSMinSampleValue        0x0154
274 #define PropertyTagSMaxSampleValue        0x0155
275 #define PropertyTagTransferRange          0x0156
276
277 #define PropertyTagJPEGProc               0x0200
278 #define PropertyTagJPEGInterFormat        0x0201
279 #define PropertyTagJPEGInterLength        0x0202
280 #define PropertyTagJPEGRestartInterval    0x0203
281 #define PropertyTagJPEGLosslessPredictors 0x0205
282 #define PropertyTagJPEGPointTransforms    0x0206
283 #define PropertyTagJPEGQTables            0x0207
284 #define PropertyTagJPEGDCTables           0x0208
285 #define PropertyTagJPEGACTables           0x0209
286
287 #define PropertyTagYCbCrCoefficients      0x0211
288 #define PropertyTagYCbCrSubsampling       0x0212
289 #define PropertyTagYCbCrPositioning       0x0213
290 #define PropertyTagREFBlackWhite          0x0214
291
292 #define PropertyTagICCProfile          0x8773
293
294 #define PropertyTagGamma                0x0301
295 #define PropertyTagICCProfileDescriptor 0x0302
296 #define PropertyTagSRGBRenderingIntent  0x0303
297
298 #define PropertyTagImageTitle          0x0320
299 #define PropertyTagCopyright           0x8298
300
301 #define PropertyTagResolutionXUnit            0x5001
302 #define PropertyTagResolutionYUnit            0x5002
303 #define PropertyTagResolutionXLengthUnit      0x5003
304 #define PropertyTagResolutionYLengthUnit      0x5004
305 #define PropertyTagPrintFlags                 0x5005
306 #define PropertyTagPrintFlagsVersion          0x5006
307 #define PropertyTagPrintFlagsCrop             0x5007
308 #define PropertyTagPrintFlagsBleedWidth       0x5008
309 #define PropertyTagPrintFlagsBleedWidthScale  0x5009
310 #define PropertyTagHalftoneLPI                0x500A
311 #define PropertyTagHalftoneLPIUnit            0x500B
312 #define PropertyTagHalftoneDegree             0x500C
313 #define PropertyTagHalftoneShape              0x500D
314 #define PropertyTagHalftoneMisc               0x500E
315 #define PropertyTagHalftoneScreen             0x500F
316 #define PropertyTagJPEGQuality                0x5010
317 #define PropertyTagGridSize                   0x5011
318 #define PropertyTagThumbnailFormat            0x5012
319 #define PropertyTagThumbnailWidth             0x5013
320 #define PropertyTagThumbnailHeight            0x5014
321 #define PropertyTagThumbnailColorDepth        0x5015
322 #define PropertyTagThumbnailPlanes            0x5016
323 #define PropertyTagThumbnailRawBytes          0x5017
324 #define PropertyTagThumbnailSize              0x5018
325 #define PropertyTagThumbnailCompressedSize    0x5019
326 #define PropertyTagColorTransferFunction      0x501A
327 #define PropertyTagThumbnailData              0x501B
328
329 #define PropertyTagThumbnailImageWidth        0x5020
330 #define PropertyTagThumbnailImageHeight       0x5021
331 #define PropertyTagThumbnailBitsPerSample     0x5022
332 #define PropertyTagThumbnailCompression       0x5023
333 #define PropertyTagThumbnailPhotometricInterp 0x5024
334 #define PropertyTagThumbnailImageDescription  0x5025
335 #define PropertyTagThumbnailEquipMake         0x5026
336 #define PropertyTagThumbnailEquipModel        0x5027
337 #define PropertyTagThumbnailStripOffsets      0x5028
338 #define PropertyTagThumbnailOrientation       0x5029
339 #define PropertyTagThumbnailSamplesPerPixel   0x502A
340 #define PropertyTagThumbnailRowsPerStrip      0x502B
341 #define PropertyTagThumbnailStripBytesCount   0x502C
342 #define PropertyTagThumbnailResolutionX       0x502D
343 #define PropertyTagThumbnailResolutionY       0x502E
344 #define PropertyTagThumbnailPlanarConfig      0x502F
345 #define PropertyTagThumbnailResolutionUnit    0x5030
346 #define PropertyTagThumbnailTransferFunction  0x5031
347 #define PropertyTagThumbnailSoftwareUsed      0x5032
348 #define PropertyTagThumbnailDateTime          0x5033
349 #define PropertyTagThumbnailArtist            0x5034
350 #define PropertyTagThumbnailWhitePoint        0x5035
351 #define PropertyTagThumbnailPrimaryChromaticities 0x5036
352 #define PropertyTagThumbnailYCbCrCoefficients 0x5037
353 #define PropertyTagThumbnailYCbCrSubsampling  0x5038
354 #define PropertyTagThumbnailYCbCrPositioning  0x5039
355 #define PropertyTagThumbnailRefBlackWhite     0x503A
356 #define PropertyTagThumbnailCopyRight         0x503B
357
358 #define PropertyTagLuminanceTable    0x5090
359 #define PropertyTagChrominanceTable  0x5091
360
361 #define PropertyTagFrameDelay        0x5100
362 #define PropertyTagLoopCount         0x5101
363
364 #define PropertyTagPixelUnit         0x5110
365 #define PropertyTagPixelPerUnitX     0x5111
366 #define PropertyTagPixelPerUnitY     0x5112
367 #define PropertyTagPaletteHistogram  0x5113
368
369 #define PropertyTagExifExposureTime  0x829A
370 #define PropertyTagExifFNumber       0x829D
371
372 #define PropertyTagExifExposureProg  0x8822
373 #define PropertyTagExifSpectralSense 0x8824
374 #define PropertyTagExifISOSpeed      0x8827
375 #define PropertyTagExifOECF          0x8828
376
377 #define PropertyTagExifVer           0x9000
378 #define PropertyTagExifDTOrig        0x9003
379 #define PropertyTagExifDTDigitized   0x9004
380
381 #define PropertyTagExifCompConfig    0x9101
382 #define PropertyTagExifCompBPP       0x9102
383
384 #define PropertyTagExifShutterSpeed  0x9201
385 #define PropertyTagExifAperture      0x9202
386 #define PropertyTagExifBrightness    0x9203
387 #define PropertyTagExifExposureBias  0x9204
388 #define PropertyTagExifMaxAperture   0x9205
389 #define PropertyTagExifSubjectDist   0x9206
390 #define PropertyTagExifMeteringMode  0x9207
391 #define PropertyTagExifLightSource   0x9208
392 #define PropertyTagExifFlash         0x9209
393 #define PropertyTagExifFocalLength   0x920A
394 #define PropertyTagExifMakerNote     0x927C
395 #define PropertyTagExifUserComment   0x9286
396 #define PropertyTagExifDTSubsec      0x9290
397 #define PropertyTagExifDTOrigSS      0x9291
398 #define PropertyTagExifDTDigSS       0x9292
399
400 #define PropertyTagExifFPXVer        0xA000
401 #define PropertyTagExifColorSpace    0xA001
402 #define PropertyTagExifPixXDim       0xA002
403 #define PropertyTagExifPixYDim       0xA003
404 #define PropertyTagExifRelatedWav    0xA004
405 #define PropertyTagExifInterop       0xA005
406 #define PropertyTagExifFlashEnergy   0xA20B
407 #define PropertyTagExifSpatialFR     0xA20C
408 #define PropertyTagExifFocalXRes     0xA20E
409 #define PropertyTagExifFocalYRes     0xA20F
410 #define PropertyTagExifFocalResUnit  0xA210
411 #define PropertyTagExifSubjectLoc    0xA214
412 #define PropertyTagExifExposureIndex 0xA215
413 #define PropertyTagExifSensingMethod 0xA217
414 #define PropertyTagExifFileSource    0xA300
415 #define PropertyTagExifSceneType     0xA301
416 #define PropertyTagExifCfaPattern    0xA302
417
418 #define PropertyTagGpsVer            0x0000
419 #define PropertyTagGpsLatitudeRef    0x0001
420 #define PropertyTagGpsLatitude       0x0002
421 #define PropertyTagGpsLongitudeRef   0x0003
422 #define PropertyTagGpsLongitude      0x0004
423 #define PropertyTagGpsAltitudeRef    0x0005
424 #define PropertyTagGpsAltitude       0x0006
425 #define PropertyTagGpsGpsTime        0x0007
426 #define PropertyTagGpsGpsSatellites  0x0008
427 #define PropertyTagGpsGpsStatus      0x0009
428 #define PropertyTagGpsGpsMeasureMode 0x000A
429 #define PropertyTagGpsGpsDop         0x000B
430 #define PropertyTagGpsSpeedRef       0x000C
431 #define PropertyTagGpsSpeed          0x000D
432 #define PropertyTagGpsTrackRef       0x000E
433 #define PropertyTagGpsTrack          0x000F
434 #define PropertyTagGpsImgDirRef      0x0010
435 #define PropertyTagGpsImgDir         0x0011
436 #define PropertyTagGpsMapDatum       0x0012
437 #define PropertyTagGpsDestLatRef     0x0013
438 #define PropertyTagGpsDestLat        0x0014
439 #define PropertyTagGpsDestLongRef    0x0015
440 #define PropertyTagGpsDestLong       0x0016
441 #define PropertyTagGpsDestBearRef    0x0017
442 #define PropertyTagGpsDestBear       0x0018
443 #define PropertyTagGpsDestDistRef    0x0019
444 #define PropertyTagGpsDestDist       0x001A
445
446 #endif /* _GDIPLUSIMAGING_H */