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