PageRenderTime 53ms CodeModel.GetById 1ms app.highlight 46ms RepoModel.GetById 1ms app.codeStats 0ms

/binding/win32/gdiplusimaging.d

http://github.com/wilkie/djehuty
D | 584 lines | 386 code | 71 blank | 127 comment | 0 complexity | df2265c4b202b37b6f6ad4173c70d22d MD5 | raw file
  1/*
  2 * gdiplusimaging.d
  3 *
  4 * This module implements GdiPlusImaging.h for D. The original copyright
  5 * info is given below.
  6 *
  7 * Author: Dave Wilkinson
  8 * Originated: November 25th, 2009
  9 *
 10 */
 11
 12module binding.win32.gdiplusimaging;
 13
 14import binding.win32.windef;
 15import binding.win32.winbase;
 16import binding.win32.winnt;
 17import binding.win32.guiddef;
 18import binding.win32.gdiplustypes;
 19import binding.win32.gdiplusenums;
 20import binding.win32.gdipluspixelformats;
 21
 22/**************************************************************************\
 23*
 24* Copyright (c) 1999-2000  Microsoft Corporation
 25*
 26* Module Name:
 27*
 28*   GdiplusImaging.h
 29*
 30* Abstract:
 31*
 32*   GDI+ Imaging GUIDs
 33*
 34\**************************************************************************/
 35
 36extern(System):
 37
 38//---------------------------------------------------------------------------
 39// Image file format identifiers
 40//---------------------------------------------------------------------------
 41
 42const GUID ImageFormatUndefined = {0xb96b3ca9,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 43const GUID ImageFormatMemoryBMP = {0xb96b3caa,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 44const GUID ImageFormatBMP = {0xb96b3cab,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 45const GUID ImageFormatEMF = {0xb96b3cac,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 46const GUID ImageFormatWMF = {0xb96b3cad,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 47const GUID ImageFormatJPEG = {0xb96b3cae,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 48const GUID ImageFormatPNG = {0xb96b3caf,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 49const GUID ImageFormatGIF = {0xb96b3cb0,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 50const GUID ImageFormatTIFF = {0xb96b3cb1,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 51const GUID ImageFormatEXIF = {0xb96b3cb2,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 52const GUID ImageFormatIcon = {0xb96b3cb5,0x0728,0x11d3,[0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e]};
 53
 54//---------------------------------------------------------------------------
 55// Predefined multi-frame dimension IDs
 56//---------------------------------------------------------------------------
 57
 58const GUID FrameDimensionTime = {0x6aedbd6d,0x3fb5,0x418a,[0x83,0xa6,0x7f,0x45,0x22,0x9d,0xc8,0x72]};
 59const GUID FrameDimensionResolution = {0x84236f7b,0x3bd3,0x428f,[0x8d,0xab,0x4e,0xa1,0x43,0x9c,0xa3,0x15]};
 60const GUID FrameDimensionPage = {0x7462dc86,0x6180,0x4c7e,[0x8e,0x3f,0xee,0x73,0x33,0xa7,0xa4,0x83]};
 61
 62//---------------------------------------------------------------------------
 63// Property sets
 64//---------------------------------------------------------------------------
 65
 66const GUID FormatIDImageInformation = {0xe5836cbe,0x5eef,0x4f1d,[0xac,0xde,0xae,0x4c,0x43,0xb6,0x08,0xce]};
 67const GUID FormatIDJpegAppHeaders = {0x1c4afdcd,0x6177,0x43cf,[0xab,0xc7,0x5f,0x51,0xaf,0x39,0xee,0x85]};
 68
 69//---------------------------------------------------------------------------
 70// Encoder parameter sets
 71//---------------------------------------------------------------------------
 72
 73const GUID EncoderCompression = {0xe09d739d,0xccd4,0x44ee,[0x8e,0xba,0x3f,0xbf,0x8b,0xe4,0xfc,0x58]};
 74const GUID EncoderColorDepth = {0x66087055,0xad66,0x4c7c,[0x9a,0x18,0x38,0xa2,0x31,0x0b,0x83,0x37]};
 75const GUID EncoderScanMethod = {0x3a4e2661,0x3109,0x4e56,[0x85,0x36,0x42,0xc1,0x56,0xe7,0xdc,0xfa]};
 76const GUID EncoderVersion = {0x24d18c76,0x814a,0x41a4,[0xbf,0x53,0x1c,0x21,0x9c,0xcc,0xf7,0x97]};
 77const GUID EncoderRenderMethod = {0x6d42c53a,0x229a,0x4825,[0x8b,0xb7,0x5c,0x99,0xe2,0xb9,0xa8,0xb8]};
 78const GUID EncoderQuality = {0x1d5be4b5,0xfa4a,0x452d,[0x9c,0xdd,0x5d,0xb3,0x51,0x05,0xe7,0xeb]};
 79const GUID EncoderTransformation = {0x8d0eb2d1,0xa58e,0x4ea8,[0xaa,0x14,0x10,0x80,0x74,0xb7,0xb6,0xf9]};
 80const GUID EncoderLuminanceTable = {0xedb33bce,0x0266,0x4a77,[0xb9,0x04,0x27,0x21,0x60,0x99,0xe7,0x17]};
 81const GUID EncoderChrominanceTable = {0xf2e455dc,0x09b3,0x4316,[0x82,0x60,0x67,0x6a,0xda,0x32,0x48,0x1c]};
 82const GUID EncoderSaveFlag = {0x292266fc,0xac40,0x47bf,[0x8c, 0xfc, 0xa8, 0x5b, 0x89, 0xa6, 0x55, 0xde]};
 83
 84const GUID EncoderColorSpace = {0xae7a62a0,0xee2c,0x49d8,[0x9d,0x7,0x1b,0xa8,0xa9,0x27,0x59,0x6e]};
 85const GUID EncoderImageItems = {0x63875e13,0x1f1d,0x45ab,[0x91, 0x95, 0xa2, 0x9b, 0x60, 0x66, 0xa6, 0x50]};
 86const GUID EncoderSaveAsCMYK = {0xa219bbc9, 0xa9d, 0x4005, [0xa3, 0xee, 0x3a, 0x42, 0x1b, 0x8b, 0xb0, 0x6c]};
 87
 88const GUID CodecIImageBytes = {0x025d1823,0x6c7d,0x447b,[0xbb, 0xdb, 0xa3, 0xcb, 0xc3, 0xdf, 0xa2, 0xfc]};
 89
 90/*MIDL_INTERFACE("025D1823-6C7D-447B-BBDB-A3CBC3DFA2FC")
 91IImageBytes : public IUnknown
 92{
 93public:
 94    // Return total number of bytes in the IStream
 95
 96    STDMETHOD(CountBytes)(
 97        OUT UINT *pcb
 98        ) = 0;
 99
100    // Locks "cb" bytes, starting from "ulOffset" in the stream, and returns the
101    // pointer to the beginning of the locked memory chunk in "ppvBytes"
102
103    STDMETHOD(LockBytes)(
104        IN UINT cb,
105        IN ULONG ulOffset,
106        OUT const VOID ** ppvBytes
107        ) = 0;
108
109    // Unlocks "cb" bytes, pointed by "pvBytes", starting from "ulOffset" in the
110    // stream
111
112    STDMETHOD(UnlockBytes)(
113        IN const VOID *pvBytes,
114        IN UINT cb,
115        IN ULONG ulOffset
116        ) = 0;
117};
118*/
119
120//--------------------------------------------------------------------------
121// ImageCodecInfo structure
122//--------------------------------------------------------------------------
123
124struct ImageCodecInfo {
125    CLSID Clsid;
126    GUID  FormatID;
127    WCHAR* CodecName;
128    WCHAR* DllName;
129    WCHAR* FormatDescription;
130    WCHAR* FilenameExtension;
131    WCHAR* MimeType;
132    DWORD Flags;
133    DWORD Version;
134    DWORD SigCount;
135    DWORD SigSize;
136    BYTE* SigPattern;
137    BYTE* SigMask;
138}
139
140//--------------------------------------------------------------------------
141// Information flags about image codecs
142//--------------------------------------------------------------------------
143
144enum ImageCodecFlags {
145    ImageCodecFlagsEncoder            = 0x00000001,
146    ImageCodecFlagsDecoder            = 0x00000002,
147    ImageCodecFlagsSupportBitmap      = 0x00000004,
148    ImageCodecFlagsSupportVector      = 0x00000008,
149    ImageCodecFlagsSeekableEncode     = 0x00000010,
150    ImageCodecFlagsBlockingDecode     = 0x00000020,
151
152    ImageCodecFlagsBuiltin            = 0x00010000,
153    ImageCodecFlagsSystem             = 0x00020000,
154    ImageCodecFlagsUser               = 0x00040000
155}
156
157//---------------------------------------------------------------------------
158// Access modes used when calling Image::LockBits
159//---------------------------------------------------------------------------
160
161enum ImageLockMode {
162    ImageLockModeRead        = 0x0001,
163    ImageLockModeWrite       = 0x0002,
164    ImageLockModeReadWrite   = 0x0003,
165    ImageLockModeUserInputBuf= 0x0004
166}
167
168//---------------------------------------------------------------------------
169// Information about image pixel data
170//---------------------------------------------------------------------------
171
172struct BitmapData {
173    UINT Width;
174    UINT Height;
175    INT Stride;
176    PixelFormat _PixelFormat;
177    VOID* Scan0;
178    UINT_PTR Reserved;
179}
180
181//---------------------------------------------------------------------------
182// Image flags
183//---------------------------------------------------------------------------
184
185enum ImageFlags {
186    ImageFlagsNone                = 0,
187
188    // Low-word: shared with SINKFLAG_x
189
190    ImageFlagsScalable            = 0x0001,
191    ImageFlagsHasAlpha            = 0x0002,
192    ImageFlagsHasTranslucent      = 0x0004,
193    ImageFlagsPartiallyScalable   = 0x0008,
194
195    // Low-word: color space definition
196
197    ImageFlagsColorSpaceRGB       = 0x0010,
198    ImageFlagsColorSpaceCMYK      = 0x0020,
199    ImageFlagsColorSpaceGRAY      = 0x0040,
200    ImageFlagsColorSpaceYCBCR     = 0x0080,
201    ImageFlagsColorSpaceYCCK      = 0x0100,
202
203    // Low-word: image size info
204
205    ImageFlagsHasRealDPI          = 0x1000,
206    ImageFlagsHasRealPixelSize    = 0x2000,
207
208    // High-word
209
210    ImageFlagsReadOnly            = 0x00010000,
211    ImageFlagsCaching             = 0x00020000
212}
213
214enum RotateFlipType {
215    RotateNoneFlipNone = 0,
216    Rotate90FlipNone   = 1,
217    Rotate180FlipNone  = 2,
218    Rotate270FlipNone  = 3,
219
220    RotateNoneFlipX    = 4,
221    Rotate90FlipX      = 5,
222    Rotate180FlipX     = 6,
223    Rotate270FlipX     = 7,
224
225    RotateNoneFlipY    = Rotate180FlipX,
226    Rotate90FlipY      = Rotate270FlipX,
227    Rotate180FlipY     = RotateNoneFlipX,
228    Rotate270FlipY     = Rotate90FlipX,
229
230    RotateNoneFlipXY   = Rotate180FlipNone,
231    Rotate90FlipXY     = Rotate270FlipNone,
232    Rotate180FlipXY    = RotateNoneFlipNone,
233    Rotate270FlipXY    = Rotate90FlipNone
234}
235
236//---------------------------------------------------------------------------
237// Encoder Parameter structure
238//---------------------------------------------------------------------------
239struct EncoderParameter {
240    GUID    Guid;               // GUID of the parameter
241    ULONG   NumberOfValues;     // Number of the parameter values
242    ULONG   Type;               // Value type, like ValueTypeLONG  etc.
243    VOID*   Value;              // A pointer to the parameter values
244}
245
246//---------------------------------------------------------------------------
247// Encoder Parameters structure
248//---------------------------------------------------------------------------
249struct EncoderParameters {
250    UINT Count;                      // Number of parameters in this structure
251    EncoderParameter[1] Parameter;   // Parameter values
252}
253
254enum ItemDataPosition {
255    ItemDataPositionAfterHeader    = 0x0,
256    ItemDataPositionAfterPalette   = 0x1,
257    ItemDataPositionAfterBits      = 0x2,
258}
259
260//---------------------------------------------------------------------------
261// External Data Item
262//---------------------------------------------------------------------------
263struct ImageItemData {
264    UINT  Size;           // size of the structure
265    UINT  Position;       // flags describing how the data is to be used.
266    VOID *Desc;           // description on how the data is to be saved.
267                          // it is different for every codec type.
268    UINT  DescSize;       // size memory pointed by Desc
269    VOID *Data;           // pointer to the data that is to be saved in the
270                          // file, could be anything saved directly.
271    UINT  DataSize;       // size memory pointed by Data
272    UINT  Cookie;         // opaque for the apps data member used during
273                          // enumeration of image data items.
274}
275
276//---------------------------------------------------------------------------
277// Property Item
278//---------------------------------------------------------------------------
279struct PropertyItem {
280    ULONG  id;                 // ID of this property
281    ULONG   length;             // Length of the property value, in bytes
282    WORD    type;               // Type of the value, as one of TAG_TYPE_XXX
283                                // defined above
284    VOID*   value;              // property value
285}
286
287//---------------------------------------------------------------------------
288// Image property types
289//---------------------------------------------------------------------------
290const auto PropertyTagTypeByte         = 1;
291const auto PropertyTagTypeASCII        = 2;
292const auto PropertyTagTypeShort        = 3;
293const auto PropertyTagTypeLong         = 4;
294const auto PropertyTagTypeRational     = 5;
295const auto PropertyTagTypeUndefined    = 7;
296const auto PropertyTagTypeSLONG        = 9;
297const auto PropertyTagTypeSRational   = 10;
298
299//---------------------------------------------------------------------------
300// Image property ID tags
301//---------------------------------------------------------------------------
302
303const auto PropertyTagExifIFD              = 0x8769;
304const auto PropertyTagGpsIFD               = 0x8825;
305
306const auto PropertyTagNewSubfileType       = 0x00FE;
307const auto PropertyTagSubfileType          = 0x00FF;
308const auto PropertyTagImageWidth           = 0x0100;
309const auto PropertyTagImageHeight          = 0x0101;
310const auto PropertyTagBitsPerSample        = 0x0102;
311const auto PropertyTagCompression          = 0x0103;
312const auto PropertyTagPhotometricInterp    = 0x0106;
313const auto PropertyTagThreshHolding        = 0x0107;
314const auto PropertyTagCellWidth            = 0x0108;
315const auto PropertyTagCellHeight           = 0x0109;
316const auto PropertyTagFillOrder            = 0x010A;
317const auto PropertyTagDocumentName         = 0x010D;
318const auto PropertyTagImageDescription     = 0x010E;
319const auto PropertyTagEquipMake            = 0x010F;
320const auto PropertyTagEquipModel           = 0x0110;
321const auto PropertyTagStripOffsets         = 0x0111;
322const auto PropertyTagOrientation          = 0x0112;
323const auto PropertyTagSamplesPerPixel      = 0x0115;
324const auto PropertyTagRowsPerStrip         = 0x0116;
325const auto PropertyTagStripBytesCount      = 0x0117;
326const auto PropertyTagMinSampleValue       = 0x0118;
327const auto PropertyTagMaxSampleValue       = 0x0119;
328const auto PropertyTagXResolution          = 0x011A   ; // Image resolution in width direction
329const auto PropertyTagYResolution          = 0x011B   ; // Image resolution in height direction
330const auto PropertyTagPlanarConfig         = 0x011C   ; // Image data arrangement
331const auto PropertyTagPageName             = 0x011D;
332const auto PropertyTagXPosition            = 0x011E;
333const auto PropertyTagYPosition            = 0x011F;
334const auto PropertyTagFreeOffset           = 0x0120;
335const auto PropertyTagFreeByteCounts       = 0x0121;
336const auto PropertyTagGrayResponseUnit     = 0x0122;
337const auto PropertyTagGrayResponseCurve    = 0x0123;
338const auto PropertyTagT4Option             = 0x0124;
339const auto PropertyTagT6Option             = 0x0125;
340const auto PropertyTagResolutionUnit       = 0x0128   ; // Unit of X and Y resolution
341const auto PropertyTagPageNumber           = 0x0129;
342const auto PropertyTagTransferFuncition    = 0x012D;
343const auto PropertyTagSoftwareUsed         = 0x0131;
344const auto PropertyTagDateTime             = 0x0132;
345const auto PropertyTagArtist               = 0x013B;
346const auto PropertyTagHostComputer         = 0x013C;
347const auto PropertyTagPredictor            = 0x013D;
348const auto PropertyTagWhitePoint           = 0x013E;
349const auto PropertyTagPrimaryChromaticities  = 0x013F;
350const auto PropertyTagColorMap             = 0x0140;
351const auto PropertyTagHalftoneHints        = 0x0141;
352const auto PropertyTagTileWidth            = 0x0142;
353const auto PropertyTagTileLength           = 0x0143;
354const auto PropertyTagTileOffset           = 0x0144;
355const auto PropertyTagTileByteCounts       = 0x0145;
356const auto PropertyTagInkSet               = 0x014C;
357const auto PropertyTagInkNames             = 0x014D;
358const auto PropertyTagNumberOfInks         = 0x014E;
359const auto PropertyTagDotRange             = 0x0150;
360const auto PropertyTagTargetPrinter        = 0x0151;
361const auto PropertyTagExtraSamples         = 0x0152;
362const auto PropertyTagSampleFormat         = 0x0153;
363const auto PropertyTagSMinSampleValue      = 0x0154;
364const auto PropertyTagSMaxSampleValue      = 0x0155;
365const auto PropertyTagTransferRange        = 0x0156;
366
367const auto PropertyTagJPEGProc             = 0x0200;
368const auto PropertyTagJPEGInterFormat      = 0x0201;
369const auto PropertyTagJPEGInterLength      = 0x0202;
370const auto PropertyTagJPEGRestartInterval  = 0x0203;
371const auto PropertyTagJPEGLosslessPredictors   = 0x0205;
372const auto PropertyTagJPEGPointTransforms      = 0x0206;
373const auto PropertyTagJPEGQTables          = 0x0207;
374const auto PropertyTagJPEGDCTables         = 0x0208;
375const auto PropertyTagJPEGACTables         = 0x0209;
376
377const auto PropertyTagYCbCrCoefficients    = 0x0211;
378const auto PropertyTagYCbCrSubsampling     = 0x0212;
379const auto PropertyTagYCbCrPositioning     = 0x0213;
380const auto PropertyTagREFBlackWhite        = 0x0214;
381
382const auto PropertyTagICCProfile           = 0x8773   ; // This TAG is defined by ICC
383                                                // for embedded ICC in TIFF
384const auto PropertyTagGamma                = 0x0301;
385const auto PropertyTagICCProfileDescriptor  = 0x0302;
386const auto PropertyTagSRGBRenderingIntent  = 0x0303;
387
388const auto PropertyTagImageTitle           = 0x0320;
389const auto PropertyTagCopyright            = 0x8298;
390
391// Extra TAGs (Like Adobe Image Information tags etc.)
392
393const auto PropertyTagResolutionXUnit            = 0x5001;
394const auto PropertyTagResolutionYUnit            = 0x5002;
395const auto PropertyTagResolutionXLengthUnit      = 0x5003;
396const auto PropertyTagResolutionYLengthUnit      = 0x5004;
397const auto PropertyTagPrintFlags                 = 0x5005;
398const auto PropertyTagPrintFlagsVersion          = 0x5006;
399const auto PropertyTagPrintFlagsCrop             = 0x5007;
400const auto PropertyTagPrintFlagsBleedWidth       = 0x5008;
401const auto PropertyTagPrintFlagsBleedWidthScale  = 0x5009;
402const auto PropertyTagHalftoneLPI                = 0x500A;
403const auto PropertyTagHalftoneLPIUnit            = 0x500B;
404const auto PropertyTagHalftoneDegree             = 0x500C;
405const auto PropertyTagHalftoneShape              = 0x500D;
406const auto PropertyTagHalftoneMisc               = 0x500E;
407const auto PropertyTagHalftoneScreen             = 0x500F;
408const auto PropertyTagJPEGQuality                = 0x5010;
409const auto PropertyTagGridSize                   = 0x5011;
410const auto PropertyTagThumbnailFormat            = 0x5012  ; // 1 = JPEG, 0 = RAW RGB
411const auto PropertyTagThumbnailWidth             = 0x5013;
412const auto PropertyTagThumbnailHeight            = 0x5014;
413const auto PropertyTagThumbnailColorDepth        = 0x5015;
414const auto PropertyTagThumbnailPlanes            = 0x5016;
415const auto PropertyTagThumbnailRawBytes          = 0x5017;
416const auto PropertyTagThumbnailSize              = 0x5018;
417const auto PropertyTagThumbnailCompressedSize    = 0x5019;
418const auto PropertyTagColorTransferFunction      = 0x501A;
419const auto PropertyTagThumbnailData              = 0x501B; // RAW thumbnail bits in
420                                                   // JPEG format or RGB format
421                                                   // depends on
422                                                   // PropertyTagThumbnailFormat
423
424// Thumbnail related TAGs
425                                                
426const auto PropertyTagThumbnailImageWidth        = 0x5020  ; // Thumbnail width
427const auto PropertyTagThumbnailImageHeight       = 0x5021  ; // Thumbnail height
428const auto PropertyTagThumbnailBitsPerSample     = 0x5022  ; // Number of bits per
429                                                     // component
430const auto PropertyTagThumbnailCompression       = 0x5023  ; // Compression Scheme
431const auto PropertyTagThumbnailPhotometricInterp  = 0x5024 ; // Pixel composition
432const auto PropertyTagThumbnailImageDescription  = 0x5025  ; // Image Tile
433const auto PropertyTagThumbnailEquipMake         = 0x5026  ; // Manufacturer of Image
434                                                     // Input equipment
435const auto PropertyTagThumbnailEquipModel        = 0x5027  ; // Model of Image input
436                                                     // equipment
437const auto PropertyTagThumbnailStripOffsets      = 0x5028  ; // Image data location
438const auto PropertyTagThumbnailOrientation       = 0x5029  ; // Orientation of image
439const auto PropertyTagThumbnailSamplesPerPixel   = 0x502A  ; // Number of components
440const auto PropertyTagThumbnailRowsPerStrip      = 0x502B  ; // Number of rows per strip
441const auto PropertyTagThumbnailStripBytesCount   = 0x502C  ; // Bytes per compressed
442                                                     // strip
443const auto PropertyTagThumbnailResolutionX       = 0x502D  ; // Resolution in width
444                                                     // direction
445const auto PropertyTagThumbnailResolutionY       = 0x502E  ; // Resolution in height
446                                                     // direction
447const auto PropertyTagThumbnailPlanarConfig      = 0x502F  ; // Image data arrangement
448const auto PropertyTagThumbnailResolutionUnit    = 0x5030  ; // Unit of X and Y
449                                                     // Resolution
450const auto PropertyTagThumbnailTransferFunction  = 0x5031  ; // Transfer function
451const auto PropertyTagThumbnailSoftwareUsed      = 0x5032  ; // Software used
452const auto PropertyTagThumbnailDateTime          = 0x5033  ; // File change date and
453                                                     // time
454const auto PropertyTagThumbnailArtist            = 0x5034  ; // Person who created the
455                                                     // image
456const auto PropertyTagThumbnailWhitePoint        = 0x5035  ; // White point chromaticity
457const auto PropertyTagThumbnailPrimaryChromaticities  = 0x5036 ;
458                                                     // Chromaticities of
459                                                     // primaries
460const auto PropertyTagThumbnailYCbCrCoefficients  = 0x5037 ; // Color space transforma-
461                                                     // tion coefficients
462const auto PropertyTagThumbnailYCbCrSubsampling  = 0x5038  ; // Subsampling ratio of Y
463                                                     // to C
464const auto PropertyTagThumbnailYCbCrPositioning  = 0x5039  ; // Y and C position
465const auto PropertyTagThumbnailRefBlackWhite     = 0x503A  ; // Pair of black and white
466                                                     // reference values
467const auto PropertyTagThumbnailCopyRight         = 0x503B  ; // CopyRight holder
468
469const auto PropertyTagLuminanceTable             = 0x5090;
470const auto PropertyTagChrominanceTable           = 0x5091;
471
472const auto PropertyTagFrameDelay                 = 0x5100;
473const auto PropertyTagLoopCount                  = 0x5101;
474
475const auto PropertyTagGlobalPalette              = 0x5102;
476const auto PropertyTagIndexBackground            = 0x5103;
477const auto PropertyTagIndexTransparent           = 0x5104;
478
479const auto PropertyTagPixelUnit          = 0x5110  ; // Unit specifier for pixel/unit
480const auto PropertyTagPixelPerUnitX      = 0x5111  ; // Pixels per unit in X
481const auto PropertyTagPixelPerUnitY      = 0x5112  ; // Pixels per unit in Y
482const auto PropertyTagPaletteHistogram   = 0x5113  ; // Palette histogram
483
484// EXIF specific tag
485
486const auto PropertyTagExifExposureTime   = 0x829A;
487const auto PropertyTagExifFNumber        = 0x829D;
488
489const auto PropertyTagExifExposureProg   = 0x8822;
490const auto PropertyTagExifSpectralSense  = 0x8824;
491const auto PropertyTagExifISOSpeed       = 0x8827;
492const auto PropertyTagExifOECF           = 0x8828;
493
494const auto PropertyTagExifVer             = 0x9000;
495const auto PropertyTagExifDTOrig          = 0x9003 ; // Date & time of original
496const auto PropertyTagExifDTDigitized     = 0x9004 ; // Date & time of digital data generation
497
498const auto PropertyTagExifCompConfig      = 0x9101;
499const auto PropertyTagExifCompBPP         = 0x9102;
500
501const auto PropertyTagExifShutterSpeed    = 0x9201;
502const auto PropertyTagExifAperture        = 0x9202;
503const auto PropertyTagExifBrightness      = 0x9203;
504const auto PropertyTagExifExposureBias    = 0x9204;
505const auto PropertyTagExifMaxAperture     = 0x9205;
506const auto PropertyTagExifSubjectDist     = 0x9206;
507const auto PropertyTagExifMeteringMode    = 0x9207;
508const auto PropertyTagExifLightSource     = 0x9208;
509const auto PropertyTagExifFlash           = 0x9209;
510const auto PropertyTagExifFocalLength     = 0x920A;
511const auto PropertyTagExifSubjectArea     = 0x9214  ; // exif 2.2 Subject Area
512const auto PropertyTagExifMakerNote       = 0x927C;
513const auto PropertyTagExifUserComment     = 0x9286;
514const auto PropertyTagExifDTSubsec        = 0x9290  ; // Date & Time subseconds
515const auto PropertyTagExifDTOrigSS        = 0x9291  ; // Date & Time original subseconds
516const auto PropertyTagExifDTDigSS         = 0x9292  ; // Date & TIme digitized subseconds
517
518const auto PropertyTagExifFPXVer          = 0xA000;
519const auto PropertyTagExifColorSpace      = 0xA001;
520const auto PropertyTagExifPixXDim         = 0xA002;
521const auto PropertyTagExifPixYDim         = 0xA003;
522const auto PropertyTagExifRelatedWav      = 0xA004  ; // related sound file
523const auto PropertyTagExifInterop         = 0xA005;
524const auto PropertyTagExifFlashEnergy     = 0xA20B;
525const auto PropertyTagExifSpatialFR       = 0xA20C  ; // Spatial Frequency Response
526const auto PropertyTagExifFocalXRes       = 0xA20E  ; // Focal Plane X Resolution
527const auto PropertyTagExifFocalYRes       = 0xA20F  ; // Focal Plane Y Resolution
528const auto PropertyTagExifFocalResUnit    = 0xA210  ; // Focal Plane Resolution Unit
529const auto PropertyTagExifSubjectLoc      = 0xA214;
530const auto PropertyTagExifExposureIndex   = 0xA215;
531const auto PropertyTagExifSensingMethod   = 0xA217;
532const auto PropertyTagExifFileSource      = 0xA300;
533const auto PropertyTagExifSceneType       = 0xA301;
534const auto PropertyTagExifCfaPattern      = 0xA302;
535
536// New EXIF 2.2 properties
537
538const auto PropertyTagExifCustomRendered            = 0xA401;
539const auto PropertyTagExifExposureMode              = 0xA402;
540const auto PropertyTagExifWhiteBalance              = 0xA403;
541const auto PropertyTagExifDigitalZoomRatio          = 0xA404;
542const auto PropertyTagExifFocalLengthIn35mmFilm     = 0xA405;
543const auto PropertyTagExifSceneCaptureType          = 0xA406;
544const auto PropertyTagExifGainControl               = 0xA407;
545const auto PropertyTagExifContrast                  = 0xA408;
546const auto PropertyTagExifSaturation                = 0xA409;
547const auto PropertyTagExifSharpness                 = 0xA40A;
548const auto PropertyTagExifDeviceSettingDesc         = 0xA40B;
549const auto PropertyTagExifSubjectDistanceRange      = 0xA40C;
550const auto PropertyTagExifUniqueImageID             = 0xA420;
551
552
553const auto PropertyTagGpsVer              = 0x0000;
554const auto PropertyTagGpsLatitudeRef      = 0x0001;
555const auto PropertyTagGpsLatitude         = 0x0002;
556const auto PropertyTagGpsLongitudeRef     = 0x0003;
557const auto PropertyTagGpsLongitude        = 0x0004;
558const auto PropertyTagGpsAltitudeRef      = 0x0005;
559const auto PropertyTagGpsAltitude         = 0x0006;
560const auto PropertyTagGpsGpsTime          = 0x0007;
561const auto PropertyTagGpsGpsSatellites    = 0x0008;
562const auto PropertyTagGpsGpsStatus        = 0x0009;
563const auto PropertyTagGpsGpsMeasureMode   = 0x00A;
564const auto PropertyTagGpsGpsDop           = 0x000B  ; // Measurement precision
565const auto PropertyTagGpsSpeedRef         = 0x000C;
566const auto PropertyTagGpsSpeed            = 0x000D;
567const auto PropertyTagGpsTrackRef         = 0x000E;
568const auto PropertyTagGpsTrack            = 0x000F;
569const auto PropertyTagGpsImgDirRef        = 0x0010;
570const auto PropertyTagGpsImgDir           = 0x0011;
571const auto PropertyTagGpsMapDatum         = 0x0012;
572const auto PropertyTagGpsDestLatRef       = 0x0013;
573const auto PropertyTagGpsDestLat          = 0x0014;
574const auto PropertyTagGpsDestLongRef      = 0x0015;
575const auto PropertyTagGpsDestLong         = 0x0016;
576const auto PropertyTagGpsDestBearRef      = 0x0017;
577const auto PropertyTagGpsDestBear         = 0x0018;
578const auto PropertyTagGpsDestDistRef      = 0x0019;
579const auto PropertyTagGpsDestDist         = 0x001A;
580const auto PropertyTagGpsProcessingMethod  = 0x001B;
581const auto PropertyTagGpsAreaInformation  = 0x001C;
582const auto PropertyTagGpsDate             = 0x001D;
583const auto PropertyTagGpsDifferential     = 0x001E;
584