ImageProperty.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /*
  2. * Copyright (C) =USTC= Fu Li
  3. *
  4. * Author : Fu Li
  5. * Create : 2006-9-24
  6. * Home : http://www.crazy-bit.com/
  7. * Mail : crazybit@263.net
  8. * History :
  9. */
  10. #ifndef __FOO_IMAGE_PROPERTY__2006_09_24__H__
  11. #define __FOO_IMAGE_PROPERTY__2006_09_24__H__
  12. #include "StdDefine.h"
  13. enum UIS_PROPERTY_TAG
  14. {
  15. PROPERTY_TAG_UNKNOW = 0,
  16. // it's only for compatible
  17. PROPERTY_TAG_SAVE_FLAG = 500,
  18. // tga format image info
  19. // int value : 1 means use RLE / -1 means not use
  20. PROPERTY_TAG_TGA_USERLE = 1000,
  21. // time interval between two frame
  22. PROPERTY_TAG_GIF_FRAMEDELAY = 2000,
  23. // number of times to display the animation
  24. PROPERTY_TAG_GIF_LOOPCOUNT = 2001,
  25. // transparent color index in palette
  26. PROPERTY_TAG_GIF_TRANSPARENT_INDEX = 2002,
  27. // jpeg format image info
  28. PROPERTY_TAG_JPEG_QUALITY = 3000,
  29. // normal tag
  30. PROPERTY_TAG_EquipMake = 5000,
  31. PROPERTY_TAG_EquipModel = 5001,
  32. PROPERTY_TAG_Orientation = 5002,
  33. PROPERTY_TAG_XResolution = 5003,
  34. PROPERTY_TAG_YResolution = 5004,
  35. PROPERTY_TAG_ResolutionUnit = 5005,
  36. PROPERTY_TAG_DateTime = 5006,
  37. // EXIF info
  38. PROPERTY_TAG_EXIF_ExposureTime = 10000,
  39. PROPERTY_TAG_EXIF_FNumber = 10001,
  40. PROPERTY_TAG_EXIF_ExposureProg = 10002,
  41. PROPERTY_TAG_EXIF_SpectralSense = 10003,
  42. PROPERTY_TAG_EXIF_ISOSpeed = 10004,
  43. PROPERTY_TAG_EXIF_OECF = 10005,
  44. PROPERTY_TAG_EXIF_Ver = 10006,
  45. PROPERTY_TAG_EXIF_DTOrig = 10007, // Date & time of original
  46. PROPERTY_TAG_EXIF_DTDigitized = 10008, // Date & time of digital data generation
  47. PROPERTY_TAG_EXIF_CompConfig = 10009,
  48. PROPERTY_TAG_EXIF_CompBPP = 10010,
  49. PROPERTY_TAG_EXIF_ShutterSpeed = 10011,
  50. PROPERTY_TAG_EXIF_Aperture = 10012,
  51. PROPERTY_TAG_EXIF_Brightness = 10013,
  52. PROPERTY_TAG_EXIF_ExposureBias = 10014,
  53. PROPERTY_TAG_EXIF_MaxAperture = 10015,
  54. PROPERTY_TAG_EXIF_SubjectDist = 10016,
  55. PROPERTY_TAG_EXIF_MeteringMode = 10017,
  56. PROPERTY_TAG_EXIF_LightSource = 10018,
  57. PROPERTY_TAG_EXIF_Flash = 10019,
  58. PROPERTY_TAG_EXIF_FocalLength = 10020,
  59. PROPERTY_TAG_EXIF_MakerNote = 10021,
  60. PROPERTY_TAG_EXIF_UserComment = 10022,
  61. PROPERTY_TAG_EXIF_DTSubsec = 10023, // Date & Time subseconds
  62. PROPERTY_TAG_EXIF_DTOrigSS = 10024, // Date & Time original subseconds
  63. PROPERTY_TAG_EXIF_DTDigSS = 10025, // Date & TIme digitized subseconds
  64. PROPERTY_TAG_EXIF_FPXVer = 10026,
  65. PROPERTY_TAG_EXIF_ColorSpace = 10027,
  66. PROPERTY_TAG_EXIF_PixXDim = 10028,
  67. PROPERTY_TAG_EXIF_PixYDim = 10029,
  68. PROPERTY_TAG_EXIF_RelatedWav = 10030, // related sound file
  69. PROPERTY_TAG_EXIF_Interop = 10031,
  70. PROPERTY_TAG_EXIF_FlashEnergy = 10032,
  71. PROPERTY_TAG_EXIF_SpatialFR = 10033, // Spatial Frequency Response
  72. PROPERTY_TAG_EXIF_FocalXRes = 10034, // Focal Plane X Resolution
  73. PROPERTY_TAG_EXIF_FocalYRes = 10035, // Focal Plane Y Resolution
  74. PROPERTY_TAG_EXIF_FocalResUnit = 10036, // Focal Plane Resolution Unit
  75. PROPERTY_TAG_EXIF_SubjectLoc = 10037,
  76. PROPERTY_TAG_EXIF_ExposureIndex = 10038,
  77. PROPERTY_TAG_EXIF_SensingMethod = 10039,
  78. PROPERTY_TAG_EXIF_FileSource = 10040,
  79. PROPERTY_TAG_EXIF_SceneType = 10041,
  80. PROPERTY_TAG_EXIF_CfaPattern = 10042,
  81. };
  82. //=============================================================================
  83. /**
  84. * Property of image.
  85. */
  86. class FCImageProperty : public PCL_TT_Convertor<UIS_PROPERTY_TAG, std::string>
  87. {
  88. public:
  89. /**
  90. * @name Put/Get multi frame time interval.
  91. */
  92. //@{
  93. /// Get multi frame time interval millisecond.
  94. void GetFrameDelay (std::deque<int>& listTime) const
  95. {
  96. listTime.clear() ;
  97. std::string s = QueryPropertyValue(PROPERTY_TAG_GIF_FRAMEDELAY) ;
  98. for (size_t i=0 ; i < s.length() ; i+=16)
  99. {
  100. int n ;
  101. FCOXOHelper::A2X (s.substr(i,16), n) ;
  102. listTime.push_back (n) ;
  103. }
  104. }
  105. /// Put multi frame time interval into property package.
  106. void PutFrameDelay (int nTime)
  107. {
  108. std::string s = QueryPropertyValue(PROPERTY_TAG_GIF_FRAMEDELAY) ;
  109. s += FCOXOHelper::X2A (nTime, 16) ;
  110. SetPropertyValue (PROPERTY_TAG_GIF_FRAMEDELAY, s.c_str()) ;
  111. }
  112. //@}
  113. /// Is exist nTga property.
  114. bool IsExistProperty (UIS_PROPERTY_TAG nTag) const
  115. {
  116. return (GetIndexT1(nTag) == -1) ;
  117. }
  118. /// Get property value, return "" if property not exist.
  119. std::string QueryPropertyValue (UIS_PROPERTY_TAG nTag) const
  120. {
  121. return First_to_Second(nTag, "") ;
  122. }
  123. /// Set property value.
  124. void SetPropertyValue (UIS_PROPERTY_TAG nTag, const char* strValue)
  125. {
  126. int n = GetIndexT1(nTag) ;
  127. if (n == -1)
  128. {
  129. AddElement (nTag, strValue) ;
  130. }
  131. else
  132. {
  133. GetT2(n) = strValue ;
  134. }
  135. }
  136. };
  137. #endif