rfreeimage 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (860) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +1 -0
  4. data/Rakefile +34 -0
  5. data/ext/rfreeimage/extconf.rb +35 -0
  6. data/ext/rfreeimage/rfi_main.c +389 -0
  7. data/lib/rfreeimage/image.rb +26 -0
  8. data/lib/rfreeimage/version.rb +3 -0
  9. data/lib/rfreeimage.rb +3 -0
  10. data/rfreeimage.gemspec +32 -0
  11. data/vendor/FreeImage/Makefile +34 -0
  12. data/vendor/FreeImage/Makefile.cygwin +74 -0
  13. data/vendor/FreeImage/Makefile.fip +84 -0
  14. data/vendor/FreeImage/Makefile.gnu +83 -0
  15. data/vendor/FreeImage/Makefile.iphone +96 -0
  16. data/vendor/FreeImage/Makefile.mingw +136 -0
  17. data/vendor/FreeImage/Makefile.osx +115 -0
  18. data/vendor/FreeImage/Makefile.solaris +66 -0
  19. data/vendor/FreeImage/Makefile.srcs +6 -0
  20. data/vendor/FreeImage/README.iphone +19 -0
  21. data/vendor/FreeImage/README.linux +50 -0
  22. data/vendor/FreeImage/README.minGW +236 -0
  23. data/vendor/FreeImage/README.osx +44 -0
  24. data/vendor/FreeImage/README.solaris +67 -0
  25. data/vendor/FreeImage/Source/CacheFile.h +92 -0
  26. data/vendor/FreeImage/Source/DeprecationManager/Deprecated.cpp +36 -0
  27. data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.cpp +103 -0
  28. data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.h +83 -0
  29. data/vendor/FreeImage/Source/FreeImage/BitmapAccess.cpp +1573 -0
  30. data/vendor/FreeImage/Source/FreeImage/CacheFile.cpp +271 -0
  31. data/vendor/FreeImage/Source/FreeImage/ColorLookup.cpp +785 -0
  32. data/vendor/FreeImage/Source/FreeImage/Conversion.cpp +551 -0
  33. data/vendor/FreeImage/Source/FreeImage/Conversion16_555.cpp +209 -0
  34. data/vendor/FreeImage/Source/FreeImage/Conversion16_565.cpp +204 -0
  35. data/vendor/FreeImage/Source/FreeImage/Conversion24.cpp +252 -0
  36. data/vendor/FreeImage/Source/FreeImage/Conversion32.cpp +345 -0
  37. data/vendor/FreeImage/Source/FreeImage/Conversion4.cpp +246 -0
  38. data/vendor/FreeImage/Source/FreeImage/Conversion8.cpp +305 -0
  39. data/vendor/FreeImage/Source/FreeImage/ConversionFloat.cpp +194 -0
  40. data/vendor/FreeImage/Source/FreeImage/ConversionRGB16.cpp +144 -0
  41. data/vendor/FreeImage/Source/FreeImage/ConversionRGBA16.cpp +147 -0
  42. data/vendor/FreeImage/Source/FreeImage/ConversionRGBAF.cpp +250 -0
  43. data/vendor/FreeImage/Source/FreeImage/ConversionRGBF.cpp +243 -0
  44. data/vendor/FreeImage/Source/FreeImage/ConversionType.cpp +699 -0
  45. data/vendor/FreeImage/Source/FreeImage/ConversionUINT16.cpp +134 -0
  46. data/vendor/FreeImage/Source/FreeImage/FreeImage.cpp +226 -0
  47. data/vendor/FreeImage/Source/FreeImage/FreeImageC.c +22 -0
  48. data/vendor/FreeImage/Source/FreeImage/FreeImageIO.cpp +175 -0
  49. data/vendor/FreeImage/Source/FreeImage/GetType.cpp +92 -0
  50. data/vendor/FreeImage/Source/FreeImage/Halftoning.cpp +474 -0
  51. data/vendor/FreeImage/Source/FreeImage/J2KHelper.cpp +591 -0
  52. data/vendor/FreeImage/Source/FreeImage/J2KHelper.h +36 -0
  53. data/vendor/FreeImage/Source/FreeImage/LFPQuantizer.cpp +208 -0
  54. data/vendor/FreeImage/Source/FreeImage/MNGHelper.cpp +1320 -0
  55. data/vendor/FreeImage/Source/FreeImage/MemoryIO.cpp +237 -0
  56. data/vendor/FreeImage/Source/FreeImage/MultiPage.cpp +974 -0
  57. data/vendor/FreeImage/Source/FreeImage/NNQuantizer.cpp +507 -0
  58. data/vendor/FreeImage/Source/FreeImage/PSDParser.cpp +1057 -0
  59. data/vendor/FreeImage/Source/FreeImage/PSDParser.h +271 -0
  60. data/vendor/FreeImage/Source/FreeImage/PixelAccess.cpp +197 -0
  61. data/vendor/FreeImage/Source/FreeImage/Plugin.cpp +822 -0
  62. data/vendor/FreeImage/Source/FreeImage/PluginBMP.cpp +1494 -0
  63. data/vendor/FreeImage/Source/FreeImage/PluginCUT.cpp +240 -0
  64. data/vendor/FreeImage/Source/FreeImage/PluginDDS.cpp +655 -0
  65. data/vendor/FreeImage/Source/FreeImage/PluginEXR.cpp +773 -0
  66. data/vendor/FreeImage/Source/FreeImage/PluginG3.cpp +433 -0
  67. data/vendor/FreeImage/Source/FreeImage/PluginGIF.cpp +1407 -0
  68. data/vendor/FreeImage/Source/FreeImage/PluginHDR.cpp +722 -0
  69. data/vendor/FreeImage/Source/FreeImage/PluginICO.cpp +824 -0
  70. data/vendor/FreeImage/Source/FreeImage/PluginIFF.cpp +459 -0
  71. data/vendor/FreeImage/Source/FreeImage/PluginJ2K.cpp +328 -0
  72. data/vendor/FreeImage/Source/FreeImage/PluginJNG.cpp +162 -0
  73. data/vendor/FreeImage/Source/FreeImage/PluginJP2.cpp +328 -0
  74. data/vendor/FreeImage/Source/FreeImage/PluginJPEG.cpp +1706 -0
  75. data/vendor/FreeImage/Source/FreeImage/PluginJXR.cpp +1475 -0
  76. data/vendor/FreeImage/Source/FreeImage/PluginKOALA.cpp +243 -0
  77. data/vendor/FreeImage/Source/FreeImage/PluginMNG.cpp +153 -0
  78. data/vendor/FreeImage/Source/FreeImage/PluginPCD.cpp +251 -0
  79. data/vendor/FreeImage/Source/FreeImage/PluginPCX.cpp +659 -0
  80. data/vendor/FreeImage/Source/FreeImage/PluginPFM.cpp +409 -0
  81. data/vendor/FreeImage/Source/FreeImage/PluginPICT.cpp +1343 -0
  82. data/vendor/FreeImage/Source/FreeImage/PluginPNG.cpp +1115 -0
  83. data/vendor/FreeImage/Source/FreeImage/PluginPNM.cpp +838 -0
  84. data/vendor/FreeImage/Source/FreeImage/PluginPSD.cpp +131 -0
  85. data/vendor/FreeImage/Source/FreeImage/PluginRAS.cpp +512 -0
  86. data/vendor/FreeImage/Source/FreeImage/PluginRAW.cpp +793 -0
  87. data/vendor/FreeImage/Source/FreeImage/PluginSGI.cpp +425 -0
  88. data/vendor/FreeImage/Source/FreeImage/PluginTARGA.cpp +1591 -0
  89. data/vendor/FreeImage/Source/FreeImage/PluginTIFF.cpp +2631 -0
  90. data/vendor/FreeImage/Source/FreeImage/PluginWBMP.cpp +372 -0
  91. data/vendor/FreeImage/Source/FreeImage/PluginWebP.cpp +698 -0
  92. data/vendor/FreeImage/Source/FreeImage/PluginXBM.cpp +399 -0
  93. data/vendor/FreeImage/Source/FreeImage/PluginXPM.cpp +487 -0
  94. data/vendor/FreeImage/Source/FreeImage/TIFFLogLuv.cpp +65 -0
  95. data/vendor/FreeImage/Source/FreeImage/ToneMapping.cpp +75 -0
  96. data/vendor/FreeImage/Source/FreeImage/WuQuantizer.cpp +559 -0
  97. data/vendor/FreeImage/Source/FreeImage/ZLibInterface.cpp +223 -0
  98. data/vendor/FreeImage/Source/FreeImage/tmoColorConvert.cpp +479 -0
  99. data/vendor/FreeImage/Source/FreeImage/tmoDrago03.cpp +295 -0
  100. data/vendor/FreeImage/Source/FreeImage/tmoFattal02.cpp +689 -0
  101. data/vendor/FreeImage/Source/FreeImage/tmoReinhard05.cpp +260 -0
  102. data/vendor/FreeImage/Source/FreeImage.h +1153 -0
  103. data/vendor/FreeImage/Source/FreeImageIO.h +63 -0
  104. data/vendor/FreeImage/Source/FreeImageToolkit/BSplineRotate.cpp +730 -0
  105. data/vendor/FreeImage/Source/FreeImageToolkit/Background.cpp +895 -0
  106. data/vendor/FreeImage/Source/FreeImageToolkit/Channels.cpp +488 -0
  107. data/vendor/FreeImage/Source/FreeImageToolkit/ClassicRotate.cpp +917 -0
  108. data/vendor/FreeImage/Source/FreeImageToolkit/Colors.cpp +967 -0
  109. data/vendor/FreeImage/Source/FreeImageToolkit/CopyPaste.cpp +861 -0
  110. data/vendor/FreeImage/Source/FreeImageToolkit/Display.cpp +230 -0
  111. data/vendor/FreeImage/Source/FreeImageToolkit/Filters.h +287 -0
  112. data/vendor/FreeImage/Source/FreeImageToolkit/Flip.cpp +166 -0
  113. data/vendor/FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp +623 -0
  114. data/vendor/FreeImage/Source/FreeImageToolkit/MultigridPoissonSolver.cpp +505 -0
  115. data/vendor/FreeImage/Source/FreeImageToolkit/Rescale.cpp +192 -0
  116. data/vendor/FreeImage/Source/FreeImageToolkit/Resize.cpp +2116 -0
  117. data/vendor/FreeImage/Source/FreeImageToolkit/Resize.h +196 -0
  118. data/vendor/FreeImage/Source/LibJPEG/ansi2knr.c +739 -0
  119. data/vendor/FreeImage/Source/LibJPEG/cderror.h +134 -0
  120. data/vendor/FreeImage/Source/LibJPEG/cdjpeg.c +181 -0
  121. data/vendor/FreeImage/Source/LibJPEG/cdjpeg.h +187 -0
  122. data/vendor/FreeImage/Source/LibJPEG/cjpeg.c +664 -0
  123. data/vendor/FreeImage/Source/LibJPEG/ckconfig.c +402 -0
  124. data/vendor/FreeImage/Source/LibJPEG/djpeg.c +617 -0
  125. data/vendor/FreeImage/Source/LibJPEG/example.c +433 -0
  126. data/vendor/FreeImage/Source/LibJPEG/jaricom.c +153 -0
  127. data/vendor/FreeImage/Source/LibJPEG/jcapimin.c +288 -0
  128. data/vendor/FreeImage/Source/LibJPEG/jcapistd.c +162 -0
  129. data/vendor/FreeImage/Source/LibJPEG/jcarith.c +944 -0
  130. data/vendor/FreeImage/Source/LibJPEG/jccoefct.c +454 -0
  131. data/vendor/FreeImage/Source/LibJPEG/jccolor.c +604 -0
  132. data/vendor/FreeImage/Source/LibJPEG/jcdctmgr.c +477 -0
  133. data/vendor/FreeImage/Source/LibJPEG/jchuff.c +1573 -0
  134. data/vendor/FreeImage/Source/LibJPEG/jcinit.c +84 -0
  135. data/vendor/FreeImage/Source/LibJPEG/jcmainct.c +297 -0
  136. data/vendor/FreeImage/Source/LibJPEG/jcmarker.c +719 -0
  137. data/vendor/FreeImage/Source/LibJPEG/jcmaster.c +856 -0
  138. data/vendor/FreeImage/Source/LibJPEG/jcomapi.c +106 -0
  139. data/vendor/FreeImage/Source/LibJPEG/jconfig.h +161 -0
  140. data/vendor/FreeImage/Source/LibJPEG/jcparam.c +675 -0
  141. data/vendor/FreeImage/Source/LibJPEG/jcprepct.c +358 -0
  142. data/vendor/FreeImage/Source/LibJPEG/jcsample.c +545 -0
  143. data/vendor/FreeImage/Source/LibJPEG/jctrans.c +385 -0
  144. data/vendor/FreeImage/Source/LibJPEG/jdapimin.c +399 -0
  145. data/vendor/FreeImage/Source/LibJPEG/jdapistd.c +276 -0
  146. data/vendor/FreeImage/Source/LibJPEG/jdarith.c +796 -0
  147. data/vendor/FreeImage/Source/LibJPEG/jdatadst.c +270 -0
  148. data/vendor/FreeImage/Source/LibJPEG/jdatasrc.c +275 -0
  149. data/vendor/FreeImage/Source/LibJPEG/jdcoefct.c +741 -0
  150. data/vendor/FreeImage/Source/LibJPEG/jdcolor.c +748 -0
  151. data/vendor/FreeImage/Source/LibJPEG/jdct.h +393 -0
  152. data/vendor/FreeImage/Source/LibJPEG/jddctmgr.c +384 -0
  153. data/vendor/FreeImage/Source/LibJPEG/jdhuff.c +1554 -0
  154. data/vendor/FreeImage/Source/LibJPEG/jdinput.c +662 -0
  155. data/vendor/FreeImage/Source/LibJPEG/jdmainct.c +513 -0
  156. data/vendor/FreeImage/Source/LibJPEG/jdmarker.c +1511 -0
  157. data/vendor/FreeImage/Source/LibJPEG/jdmaster.c +543 -0
  158. data/vendor/FreeImage/Source/LibJPEG/jdmerge.c +401 -0
  159. data/vendor/FreeImage/Source/LibJPEG/jdpostct.c +290 -0
  160. data/vendor/FreeImage/Source/LibJPEG/jdsample.c +361 -0
  161. data/vendor/FreeImage/Source/LibJPEG/jdtrans.c +140 -0
  162. data/vendor/FreeImage/Source/LibJPEG/jerror.c +253 -0
  163. data/vendor/FreeImage/Source/LibJPEG/jerror.h +304 -0
  164. data/vendor/FreeImage/Source/LibJPEG/jfdctflt.c +174 -0
  165. data/vendor/FreeImage/Source/LibJPEG/jfdctfst.c +230 -0
  166. data/vendor/FreeImage/Source/LibJPEG/jfdctint.c +4406 -0
  167. data/vendor/FreeImage/Source/LibJPEG/jidctflt.c +235 -0
  168. data/vendor/FreeImage/Source/LibJPEG/jidctfst.c +368 -0
  169. data/vendor/FreeImage/Source/LibJPEG/jidctint.c +5179 -0
  170. data/vendor/FreeImage/Source/LibJPEG/jinclude.h +91 -0
  171. data/vendor/FreeImage/Source/LibJPEG/jmemansi.c +167 -0
  172. data/vendor/FreeImage/Source/LibJPEG/jmemdos.c +638 -0
  173. data/vendor/FreeImage/Source/LibJPEG/jmemmac.c +289 -0
  174. data/vendor/FreeImage/Source/LibJPEG/jmemmgr.c +1119 -0
  175. data/vendor/FreeImage/Source/LibJPEG/jmemname.c +276 -0
  176. data/vendor/FreeImage/Source/LibJPEG/jmemnobs.c +109 -0
  177. data/vendor/FreeImage/Source/LibJPEG/jmemsys.h +198 -0
  178. data/vendor/FreeImage/Source/LibJPEG/jmorecfg.h +442 -0
  179. data/vendor/FreeImage/Source/LibJPEG/jpegint.h +426 -0
  180. data/vendor/FreeImage/Source/LibJPEG/jpeglib.h +1180 -0
  181. data/vendor/FreeImage/Source/LibJPEG/jpegtran.c +577 -0
  182. data/vendor/FreeImage/Source/LibJPEG/jquant1.c +857 -0
  183. data/vendor/FreeImage/Source/LibJPEG/jquant2.c +1311 -0
  184. data/vendor/FreeImage/Source/LibJPEG/jutils.c +227 -0
  185. data/vendor/FreeImage/Source/LibJPEG/jversion.h +14 -0
  186. data/vendor/FreeImage/Source/LibJPEG/rdbmp.c +480 -0
  187. data/vendor/FreeImage/Source/LibJPEG/rdcolmap.c +253 -0
  188. data/vendor/FreeImage/Source/LibJPEG/rdgif.c +38 -0
  189. data/vendor/FreeImage/Source/LibJPEG/rdjpgcom.c +515 -0
  190. data/vendor/FreeImage/Source/LibJPEG/rdppm.c +459 -0
  191. data/vendor/FreeImage/Source/LibJPEG/rdrle.c +387 -0
  192. data/vendor/FreeImage/Source/LibJPEG/rdswitch.c +365 -0
  193. data/vendor/FreeImage/Source/LibJPEG/rdtarga.c +500 -0
  194. data/vendor/FreeImage/Source/LibJPEG/transupp.c +1763 -0
  195. data/vendor/FreeImage/Source/LibJPEG/transupp.h +219 -0
  196. data/vendor/FreeImage/Source/LibJPEG/wrbmp.c +442 -0
  197. data/vendor/FreeImage/Source/LibJPEG/wrgif.c +399 -0
  198. data/vendor/FreeImage/Source/LibJPEG/wrjpgcom.c +583 -0
  199. data/vendor/FreeImage/Source/LibJPEG/wrppm.c +269 -0
  200. data/vendor/FreeImage/Source/LibJPEG/wrrle.c +305 -0
  201. data/vendor/FreeImage/Source/LibJPEG/wrtarga.c +253 -0
  202. data/vendor/FreeImage/Source/LibJXR/common/include/guiddef.h +230 -0
  203. data/vendor/FreeImage/Source/LibJXR/common/include/wmsal.h +757 -0
  204. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstring.h +342 -0
  205. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_adt.h +71 -0
  206. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_strict.h +1096 -0
  207. data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_undef.h +406 -0
  208. data/vendor/FreeImage/Source/LibJXR/image/decode/JXRTranscode.c +987 -0
  209. data/vendor/FreeImage/Source/LibJXR/image/decode/decode.c +200 -0
  210. data/vendor/FreeImage/Source/LibJXR/image/decode/decode.h +143 -0
  211. data/vendor/FreeImage/Source/LibJXR/image/decode/postprocess.c +288 -0
  212. data/vendor/FreeImage/Source/LibJXR/image/decode/segdec.c +1205 -0
  213. data/vendor/FreeImage/Source/LibJXR/image/decode/strInvTransform.c +1888 -0
  214. data/vendor/FreeImage/Source/LibJXR/image/decode/strPredQuantDec.c +539 -0
  215. data/vendor/FreeImage/Source/LibJXR/image/decode/strdec.c +3628 -0
  216. data/vendor/FreeImage/Source/LibJXR/image/decode/strdec_x86.c +1640 -0
  217. data/vendor/FreeImage/Source/LibJXR/image/encode/encode.c +144 -0
  218. data/vendor/FreeImage/Source/LibJXR/image/encode/encode.h +113 -0
  219. data/vendor/FreeImage/Source/LibJXR/image/encode/segenc.c +1186 -0
  220. data/vendor/FreeImage/Source/LibJXR/image/encode/strFwdTransform.c +1111 -0
  221. data/vendor/FreeImage/Source/LibJXR/image/encode/strPredQuantEnc.c +511 -0
  222. data/vendor/FreeImage/Source/LibJXR/image/encode/strenc.c +2370 -0
  223. data/vendor/FreeImage/Source/LibJXR/image/encode/strenc_x86.c +409 -0
  224. data/vendor/FreeImage/Source/LibJXR/image/sys/adapthuff.c +511 -0
  225. data/vendor/FreeImage/Source/LibJXR/image/sys/ansi.h +61 -0
  226. data/vendor/FreeImage/Source/LibJXR/image/sys/common.h +131 -0
  227. data/vendor/FreeImage/Source/LibJXR/image/sys/image.c +183 -0
  228. data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimer.h +115 -0
  229. data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimerANSI.c +274 -0
  230. data/vendor/FreeImage/Source/LibJXR/image/sys/strPredQuant.c +306 -0
  231. data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.c +85 -0
  232. data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.h +50 -0
  233. data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.c +1251 -0
  234. data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.h +681 -0
  235. data/vendor/FreeImage/Source/LibJXR/image/sys/windowsmediaphoto.h +515 -0
  236. data/vendor/FreeImage/Source/LibJXR/image/sys/xplatform_image.h +84 -0
  237. data/vendor/FreeImage/Source/LibJXR/image/x86/x86.h +58 -0
  238. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.c +930 -0
  239. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.h +636 -0
  240. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlueJxr.c +2246 -0
  241. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGluePFC.c +2338 -0
  242. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.c +905 -0
  243. data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.h +258 -0
  244. data/vendor/FreeImage/Source/LibOpenJPEG/bio.c +188 -0
  245. data/vendor/FreeImage/Source/LibOpenJPEG/bio.h +128 -0
  246. data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.c +239 -0
  247. data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.h +68 -0
  248. data/vendor/FreeImage/Source/LibOpenJPEG/cio.c +644 -0
  249. data/vendor/FreeImage/Source/LibOpenJPEG/cio.h +393 -0
  250. data/vendor/FreeImage/Source/LibOpenJPEG/dwt.c +919 -0
  251. data/vendor/FreeImage/Source/LibOpenJPEG/dwt.h +116 -0
  252. data/vendor/FreeImage/Source/LibOpenJPEG/event.c +141 -0
  253. data/vendor/FreeImage/Source/LibOpenJPEG/event.h +97 -0
  254. data/vendor/FreeImage/Source/LibOpenJPEG/function_list.c +114 -0
  255. data/vendor/FreeImage/Source/LibOpenJPEG/function_list.h +126 -0
  256. data/vendor/FreeImage/Source/LibOpenJPEG/image.c +235 -0
  257. data/vendor/FreeImage/Source/LibOpenJPEG/image.h +63 -0
  258. data/vendor/FreeImage/Source/LibOpenJPEG/indexbox_manager.h +148 -0
  259. data/vendor/FreeImage/Source/LibOpenJPEG/invert.c +289 -0
  260. data/vendor/FreeImage/Source/LibOpenJPEG/invert.h +59 -0
  261. data/vendor/FreeImage/Source/LibOpenJPEG/j2k.c +10238 -0
  262. data/vendor/FreeImage/Source/LibOpenJPEG/j2k.h +838 -0
  263. data/vendor/FreeImage/Source/LibOpenJPEG/jp2.c +2776 -0
  264. data/vendor/FreeImage/Source/LibOpenJPEG/jp2.h +490 -0
  265. data/vendor/FreeImage/Source/LibOpenJPEG/mct.c +319 -0
  266. data/vendor/FreeImage/Source/LibOpenJPEG/mct.h +149 -0
  267. data/vendor/FreeImage/Source/LibOpenJPEG/mqc.c +604 -0
  268. data/vendor/FreeImage/Source/LibOpenJPEG/mqc.h +201 -0
  269. data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.c +955 -0
  270. data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.h +1475 -0
  271. data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.c +59 -0
  272. data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.h +54 -0
  273. data/vendor/FreeImage/Source/LibOpenJPEG/opj_codec.h +160 -0
  274. data/vendor/FreeImage/Source/LibOpenJPEG/opj_config.h +9 -0
  275. data/vendor/FreeImage/Source/LibOpenJPEG/opj_config_private.h +16 -0
  276. data/vendor/FreeImage/Source/LibOpenJPEG/opj_includes.h +175 -0
  277. data/vendor/FreeImage/Source/LibOpenJPEG/opj_intmath.h +172 -0
  278. data/vendor/FreeImage/Source/LibOpenJPEG/opj_inttypes.h +43 -0
  279. data/vendor/FreeImage/Source/LibOpenJPEG/opj_malloc.h +180 -0
  280. data/vendor/FreeImage/Source/LibOpenJPEG/opj_stdint.h +47 -0
  281. data/vendor/FreeImage/Source/LibOpenJPEG/phix_manager.c +191 -0
  282. data/vendor/FreeImage/Source/LibOpenJPEG/pi.c +1870 -0
  283. data/vendor/FreeImage/Source/LibOpenJPEG/pi.h +182 -0
  284. data/vendor/FreeImage/Source/LibOpenJPEG/ppix_manager.c +194 -0
  285. data/vendor/FreeImage/Source/LibOpenJPEG/raw.c +89 -0
  286. data/vendor/FreeImage/Source/LibOpenJPEG/raw.h +100 -0
  287. data/vendor/FreeImage/Source/LibOpenJPEG/t1.c +1751 -0
  288. data/vendor/FreeImage/Source/LibOpenJPEG/t1.h +157 -0
  289. data/vendor/FreeImage/Source/LibOpenJPEG/t1_generate_luts.c +276 -0
  290. data/vendor/FreeImage/Source/LibOpenJPEG/t1_luts.h +143 -0
  291. data/vendor/FreeImage/Source/LibOpenJPEG/t2.c +1334 -0
  292. data/vendor/FreeImage/Source/LibOpenJPEG/t2.h +127 -0
  293. data/vendor/FreeImage/Source/LibOpenJPEG/tcd.c +2123 -0
  294. data/vendor/FreeImage/Source/LibOpenJPEG/tcd.h +348 -0
  295. data/vendor/FreeImage/Source/LibOpenJPEG/tgt.c +331 -0
  296. data/vendor/FreeImage/Source/LibOpenJPEG/tgt.h +140 -0
  297. data/vendor/FreeImage/Source/LibOpenJPEG/thix_manager.c +134 -0
  298. data/vendor/FreeImage/Source/LibOpenJPEG/tpix_manager.c +185 -0
  299. data/vendor/FreeImage/Source/LibPNG/example.c +1061 -0
  300. data/vendor/FreeImage/Source/LibPNG/png.c +4493 -0
  301. data/vendor/FreeImage/Source/LibPNG/png.h +3282 -0
  302. data/vendor/FreeImage/Source/LibPNG/pngconf.h +644 -0
  303. data/vendor/FreeImage/Source/LibPNG/pngdebug.h +154 -0
  304. data/vendor/FreeImage/Source/LibPNG/pngerror.c +963 -0
  305. data/vendor/FreeImage/Source/LibPNG/pngget.c +1213 -0
  306. data/vendor/FreeImage/Source/LibPNG/pnginfo.h +260 -0
  307. data/vendor/FreeImage/Source/LibPNG/pnglibconf.h +218 -0
  308. data/vendor/FreeImage/Source/LibPNG/pngmem.c +281 -0
  309. data/vendor/FreeImage/Source/LibPNG/pngpread.c +1168 -0
  310. data/vendor/FreeImage/Source/LibPNG/pngpriv.h +1944 -0
  311. data/vendor/FreeImage/Source/LibPNG/pngread.c +4121 -0
  312. data/vendor/FreeImage/Source/LibPNG/pngrio.c +120 -0
  313. data/vendor/FreeImage/Source/LibPNG/pngrtran.c +4994 -0
  314. data/vendor/FreeImage/Source/LibPNG/pngrutil.c +4474 -0
  315. data/vendor/FreeImage/Source/LibPNG/pngset.c +1611 -0
  316. data/vendor/FreeImage/Source/LibPNG/pngstruct.h +489 -0
  317. data/vendor/FreeImage/Source/LibPNG/pngtest.c +2011 -0
  318. data/vendor/FreeImage/Source/LibPNG/pngtrans.c +849 -0
  319. data/vendor/FreeImage/Source/LibPNG/pngwio.c +168 -0
  320. data/vendor/FreeImage/Source/LibPNG/pngwrite.c +2455 -0
  321. data/vendor/FreeImage/Source/LibPNG/pngwtran.c +574 -0
  322. data/vendor/FreeImage/Source/LibPNG/pngwutil.c +3029 -0
  323. data/vendor/FreeImage/Source/LibRawLite/dcraw/dcraw.c +15462 -0
  324. data/vendor/FreeImage/Source/LibRawLite/internal/aahd_demosaic.cpp +706 -0
  325. data/vendor/FreeImage/Source/LibRawLite/internal/dcb_demosaicing.c +710 -0
  326. data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_common.cpp +13593 -0
  327. data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_fileio.cpp +240 -0
  328. data/vendor/FreeImage/Source/LibRawLite/internal/defines.h +167 -0
  329. data/vendor/FreeImage/Source/LibRawLite/internal/demosaic_packs.cpp +99 -0
  330. data/vendor/FreeImage/Source/LibRawLite/internal/dht_demosaic.cpp +873 -0
  331. data/vendor/FreeImage/Source/LibRawLite/internal/libraw_internal_funcs.h +282 -0
  332. data/vendor/FreeImage/Source/LibRawLite/internal/libraw_x3f.cpp +1919 -0
  333. data/vendor/FreeImage/Source/LibRawLite/internal/var_defines.h +216 -0
  334. data/vendor/FreeImage/Source/LibRawLite/internal/wf_filtering.cpp +1950 -0
  335. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw.h +338 -0
  336. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_alloc.h +99 -0
  337. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_const.h +233 -0
  338. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_datastream.h +238 -0
  339. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_internal.h +225 -0
  340. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_types.h +442 -0
  341. data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_version.h +62 -0
  342. data/vendor/FreeImage/Source/LibRawLite/src/libraw_c_api.cpp +230 -0
  343. data/vendor/FreeImage/Source/LibRawLite/src/libraw_cxx.cpp +4533 -0
  344. data/vendor/FreeImage/Source/LibRawLite/src/libraw_datastream.cpp +703 -0
  345. data/vendor/FreeImage/Source/LibTIFF4/mkg3states.c +451 -0
  346. data/vendor/FreeImage/Source/LibTIFF4/mkspans.c +82 -0
  347. data/vendor/FreeImage/Source/LibTIFF4/t4.h +292 -0
  348. data/vendor/FreeImage/Source/LibTIFF4/tif_aux.c +358 -0
  349. data/vendor/FreeImage/Source/LibTIFF4/tif_close.c +140 -0
  350. data/vendor/FreeImage/Source/LibTIFF4/tif_codec.c +166 -0
  351. data/vendor/FreeImage/Source/LibTIFF4/tif_color.c +287 -0
  352. data/vendor/FreeImage/Source/LibTIFF4/tif_compress.c +304 -0
  353. data/vendor/FreeImage/Source/LibTIFF4/tif_config.h +97 -0
  354. data/vendor/FreeImage/Source/LibTIFF4/tif_config.vc.h +74 -0
  355. data/vendor/FreeImage/Source/LibTIFF4/tif_config.wince.h +71 -0
  356. data/vendor/FreeImage/Source/LibTIFF4/tif_dir.c +1700 -0
  357. data/vendor/FreeImage/Source/LibTIFF4/tif_dir.h +308 -0
  358. data/vendor/FreeImage/Source/LibTIFF4/tif_dirinfo.c +959 -0
  359. data/vendor/FreeImage/Source/LibTIFF4/tif_dirread.c +5640 -0
  360. data/vendor/FreeImage/Source/LibTIFF4/tif_dirwrite.c +2910 -0
  361. data/vendor/FreeImage/Source/LibTIFF4/tif_dumpmode.c +143 -0
  362. data/vendor/FreeImage/Source/LibTIFF4/tif_error.c +80 -0
  363. data/vendor/FreeImage/Source/LibTIFF4/tif_extension.c +118 -0
  364. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.c +1595 -0
  365. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.h +538 -0
  366. data/vendor/FreeImage/Source/LibTIFF4/tif_fax3sm.c +1260 -0
  367. data/vendor/FreeImage/Source/LibTIFF4/tif_flush.c +118 -0
  368. data/vendor/FreeImage/Source/LibTIFF4/tif_getimage.c +2890 -0
  369. data/vendor/FreeImage/Source/LibTIFF4/tif_jbig.c +213 -0
  370. data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg.c +2354 -0
  371. data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg_12.c +65 -0
  372. data/vendor/FreeImage/Source/LibTIFF4/tif_luv.c +1683 -0
  373. data/vendor/FreeImage/Source/LibTIFF4/tif_lzma.c +495 -0
  374. data/vendor/FreeImage/Source/LibTIFF4/tif_lzw.c +1169 -0
  375. data/vendor/FreeImage/Source/LibTIFF4/tif_next.c +181 -0
  376. data/vendor/FreeImage/Source/LibTIFF4/tif_ojpeg.c +2501 -0
  377. data/vendor/FreeImage/Source/LibTIFF4/tif_open.c +725 -0
  378. data/vendor/FreeImage/Source/LibTIFF4/tif_packbits.c +300 -0
  379. data/vendor/FreeImage/Source/LibTIFF4/tif_pixarlog.c +1442 -0
  380. data/vendor/FreeImage/Source/LibTIFF4/tif_predict.c +764 -0
  381. data/vendor/FreeImage/Source/LibTIFF4/tif_predict.h +77 -0
  382. data/vendor/FreeImage/Source/LibTIFF4/tif_print.c +716 -0
  383. data/vendor/FreeImage/Source/LibTIFF4/tif_read.c +1086 -0
  384. data/vendor/FreeImage/Source/LibTIFF4/tif_strip.c +383 -0
  385. data/vendor/FreeImage/Source/LibTIFF4/tif_swab.c +310 -0
  386. data/vendor/FreeImage/Source/LibTIFF4/tif_thunder.c +207 -0
  387. data/vendor/FreeImage/Source/LibTIFF4/tif_tile.c +299 -0
  388. data/vendor/FreeImage/Source/LibTIFF4/tif_unix.c +325 -0
  389. data/vendor/FreeImage/Source/LibTIFF4/tif_version.c +40 -0
  390. data/vendor/FreeImage/Source/LibTIFF4/tif_vms.c +603 -0
  391. data/vendor/FreeImage/Source/LibTIFF4/tif_warning.c +81 -0
  392. data/vendor/FreeImage/Source/LibTIFF4/tif_win32.c +443 -0
  393. data/vendor/FreeImage/Source/LibTIFF4/tif_wince.c +293 -0
  394. data/vendor/FreeImage/Source/LibTIFF4/tif_write.c +771 -0
  395. data/vendor/FreeImage/Source/LibTIFF4/tif_zip.c +472 -0
  396. data/vendor/FreeImage/Source/LibTIFF4/tiff.h +681 -0
  397. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.h +170 -0
  398. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.vc.h +160 -0
  399. data/vendor/FreeImage/Source/LibTIFF4/tiffconf.wince.h +121 -0
  400. data/vendor/FreeImage/Source/LibTIFF4/tiffio.h +557 -0
  401. data/vendor/FreeImage/Source/LibTIFF4/tiffiop.h +367 -0
  402. data/vendor/FreeImage/Source/LibTIFF4/tiffvers.h +9 -0
  403. data/vendor/FreeImage/Source/LibTIFF4/uvcode.h +180 -0
  404. data/vendor/FreeImage/Source/LibWebP/src/dec/alphai.h +55 -0
  405. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.alpha.c +167 -0
  406. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.buffer.c +249 -0
  407. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.frame.c +827 -0
  408. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.idec.c +857 -0
  409. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.io.c +640 -0
  410. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.quant.c +110 -0
  411. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.tree.c +525 -0
  412. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8.c +663 -0
  413. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8l.c +1584 -0
  414. data/vendor/FreeImage/Source/LibWebP/src/dec/dec.webp.c +834 -0
  415. data/vendor/FreeImage/Source/LibWebP/src/dec/decode_vp8.h +185 -0
  416. data/vendor/FreeImage/Source/LibWebP/src/dec/vp8i.h +353 -0
  417. data/vendor/FreeImage/Source/LibWebP/src/dec/vp8li.h +136 -0
  418. data/vendor/FreeImage/Source/LibWebP/src/dec/webpi.h +120 -0
  419. data/vendor/FreeImage/Source/LibWebP/src/demux/demux.demux.c +957 -0
  420. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing.c +377 -0
  421. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_mips_dsp_r2.c +139 -0
  422. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_sse2.c +296 -0
  423. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb.c +68 -0
  424. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_mips_dsp_r2.c +108 -0
  425. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_sse2.c +62 -0
  426. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost.c +412 -0
  427. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips32.c +154 -0
  428. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips_dsp_r2.c +107 -0
  429. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_sse2.c +121 -0
  430. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cpu.c +138 -0
  431. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec.c +760 -0
  432. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_clip_tables.c +366 -0
  433. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips32.c +585 -0
  434. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c +992 -0
  435. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_neon.c +1489 -0
  436. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_sse2.c +1284 -0
  437. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc.c +788 -0
  438. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_avx2.c +24 -0
  439. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips32.c +670 -0
  440. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c +1510 -0
  441. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_neon.c +932 -0
  442. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_sse2.c +940 -0
  443. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters.c +240 -0
  444. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c +404 -0
  445. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_sse2.c +349 -0
  446. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.h +434 -0
  447. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless.c +1838 -0
  448. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips32.c +416 -0
  449. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c +921 -0
  450. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_neon.c +357 -0
  451. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_sse2.c +535 -0
  452. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler.c +115 -0
  453. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips32.c +192 -0
  454. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips_dsp_r2.c +210 -0
  455. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling.c +252 -0
  456. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c +280 -0
  457. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_neon.c +267 -0
  458. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_sse2.c +214 -0
  459. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv.c +166 -0
  460. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips32.c +100 -0
  461. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c +131 -0
  462. data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_sse2.c +322 -0
  463. data/vendor/FreeImage/Source/LibWebP/src/dsp/lossless.h +313 -0
  464. data/vendor/FreeImage/Source/LibWebP/src/dsp/mips_macro.h +200 -0
  465. data/vendor/FreeImage/Source/LibWebP/src/dsp/neon.h +82 -0
  466. data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv.h +321 -0
  467. data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv_tables_sse2.h +536 -0
  468. data/vendor/FreeImage/Source/LibWebP/src/enc/backward_references.h +202 -0
  469. data/vendor/FreeImage/Source/LibWebP/src/enc/cost.h +69 -0
  470. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.alpha.c +440 -0
  471. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.analysis.c +501 -0
  472. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.backward_references.c +1076 -0
  473. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.config.c +163 -0
  474. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.cost.c +355 -0
  475. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.filter.c +296 -0
  476. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.frame.c +850 -0
  477. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.histogram.c +897 -0
  478. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.iterator.c +456 -0
  479. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.near_lossless.c +160 -0
  480. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture.c +290 -0
  481. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_csp.c +1100 -0
  482. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_psnr.c +150 -0
  483. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_rescale.c +285 -0
  484. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_tools.c +206 -0
  485. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.quant.c +1191 -0
  486. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.syntax.c +383 -0
  487. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.token.c +285 -0
  488. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.tree.c +504 -0
  489. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.vp8l.c +1437 -0
  490. data/vendor/FreeImage/Source/LibWebP/src/enc/enc.webpenc.c +379 -0
  491. data/vendor/FreeImage/Source/LibWebP/src/enc/histogram.h +114 -0
  492. data/vendor/FreeImage/Source/LibWebP/src/enc/vp8enci.h +551 -0
  493. data/vendor/FreeImage/Source/LibWebP/src/enc/vp8li.h +78 -0
  494. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.anim_encode.c +1241 -0
  495. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxedit.c +696 -0
  496. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxinternal.c +551 -0
  497. data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxread.c +544 -0
  498. data/vendor/FreeImage/Source/LibWebP/src/mux/muxi.h +232 -0
  499. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader.h +168 -0
  500. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader_inl.h +172 -0
  501. data/vendor/FreeImage/Source/LibWebP/src/utils/bit_writer.h +120 -0
  502. data/vendor/FreeImage/Source/LibWebP/src/utils/color_cache.h +74 -0
  503. data/vendor/FreeImage/Source/LibWebP/src/utils/endian_inl.h +100 -0
  504. data/vendor/FreeImage/Source/LibWebP/src/utils/filters.h +32 -0
  505. data/vendor/FreeImage/Source/LibWebP/src/utils/huffman.h +67 -0
  506. data/vendor/FreeImage/Source/LibWebP/src/utils/huffman_encode.h +60 -0
  507. data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels.h +36 -0
  508. data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels_dec.h +35 -0
  509. data/vendor/FreeImage/Source/LibWebP/src/utils/random.h +63 -0
  510. data/vendor/FreeImage/Source/LibWebP/src/utils/rescaler.h +78 -0
  511. data/vendor/FreeImage/Source/LibWebP/src/utils/thread.h +93 -0
  512. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_reader.c +208 -0
  513. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_writer.c +308 -0
  514. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.color_cache.c +49 -0
  515. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.filters.c +76 -0
  516. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.h +121 -0
  517. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman.c +205 -0
  518. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman_encode.c +417 -0
  519. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels.c +140 -0
  520. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels_dec.c +279 -0
  521. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.random.c +43 -0
  522. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.rescaler.c +82 -0
  523. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.thread.c +309 -0
  524. data/vendor/FreeImage/Source/LibWebP/src/utils/utils.utils.c +211 -0
  525. data/vendor/FreeImage/Source/LibWebP/src/webp/decode.h +493 -0
  526. data/vendor/FreeImage/Source/LibWebP/src/webp/demux.h +224 -0
  527. data/vendor/FreeImage/Source/LibWebP/src/webp/encode.h +515 -0
  528. data/vendor/FreeImage/Source/LibWebP/src/webp/format_constants.h +88 -0
  529. data/vendor/FreeImage/Source/LibWebP/src/webp/mux.h +507 -0
  530. data/vendor/FreeImage/Source/LibWebP/src/webp/mux_types.h +97 -0
  531. data/vendor/FreeImage/Source/LibWebP/src/webp/types.h +52 -0
  532. data/vendor/FreeImage/Source/MapIntrospector.h +212 -0
  533. data/vendor/FreeImage/Source/Metadata/Exif.cpp +1253 -0
  534. data/vendor/FreeImage/Source/Metadata/FIRational.cpp +176 -0
  535. data/vendor/FreeImage/Source/Metadata/FIRational.h +108 -0
  536. data/vendor/FreeImage/Source/Metadata/FreeImageTag.cpp +353 -0
  537. data/vendor/FreeImage/Source/Metadata/FreeImageTag.h +500 -0
  538. data/vendor/FreeImage/Source/Metadata/IPTC.cpp +342 -0
  539. data/vendor/FreeImage/Source/Metadata/TagConversion.cpp +1094 -0
  540. data/vendor/FreeImage/Source/Metadata/TagLib.cpp +1618 -0
  541. data/vendor/FreeImage/Source/Metadata/XTIFF.cpp +766 -0
  542. data/vendor/FreeImage/Source/OpenEXR/Half/eLut.cpp +114 -0
  543. data/vendor/FreeImage/Source/OpenEXR/Half/eLut.h +71 -0
  544. data/vendor/FreeImage/Source/OpenEXR/Half/half.cpp +310 -0
  545. data/vendor/FreeImage/Source/OpenEXR/Half/half.h +757 -0
  546. data/vendor/FreeImage/Source/OpenEXR/Half/halfExport.h +27 -0
  547. data/vendor/FreeImage/Source/OpenEXR/Half/halfFunction.h +179 -0
  548. data/vendor/FreeImage/Source/OpenEXR/Half/halfLimits.h +102 -0
  549. data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.cpp +164 -0
  550. data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.h +16391 -0
  551. data/vendor/FreeImage/Source/OpenEXR/Iex/Iex.h +60 -0
  552. data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.cpp +156 -0
  553. data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.h +264 -0
  554. data/vendor/FreeImage/Source/OpenEXR/Iex/IexErrnoExc.h +208 -0
  555. data/vendor/FreeImage/Source/OpenEXR/Iex/IexExport.h +51 -0
  556. data/vendor/FreeImage/Source/OpenEXR/Iex/IexForward.h +229 -0
  557. data/vendor/FreeImage/Source/OpenEXR/Iex/IexMacros.h +170 -0
  558. data/vendor/FreeImage/Source/OpenEXR/Iex/IexMathExc.h +57 -0
  559. data/vendor/FreeImage/Source/OpenEXR/Iex/IexNamespace.h +112 -0
  560. data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.cpp +873 -0
  561. data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.h +97 -0
  562. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.cpp +113 -0
  563. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.h +146 -0
  564. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.cpp +530 -0
  565. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.h +91 -0
  566. data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathIeeeExc.h +62 -0
  567. data/vendor/FreeImage/Source/OpenEXR/IlmBaseConfig.h +61 -0
  568. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.cpp +633 -0
  569. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.h +324 -0
  570. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfArray.h +285 -0
  571. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.cpp +158 -0
  572. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.h +407 -0
  573. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAutoArray.h +95 -0
  574. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.cpp +1072 -0
  575. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.h +118 -0
  576. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.cpp +111 -0
  577. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.h +87 -0
  578. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.cpp +1438 -0
  579. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.h +555 -0
  580. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.cpp +322 -0
  581. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.h +436 -0
  582. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.cpp +150 -0
  583. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.h +74 -0
  584. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCheckedArithmetic.h +163 -0
  585. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.cpp +151 -0
  586. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.h +131 -0
  587. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.cpp +87 -0
  588. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.h +73 -0
  589. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.cpp +591 -0
  590. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.h +142 -0
  591. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompression.h +84 -0
  592. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.cpp +78 -0
  593. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.h +64 -0
  594. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.cpp +226 -0
  595. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.h +265 -0
  596. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.cpp +143 -0
  597. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.h +107 -0
  598. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.cpp +110 -0
  599. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.h +132 -0
  600. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.cpp +230 -0
  601. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.h +339 -0
  602. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageState.h +96 -0
  603. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.cpp +78 -0
  604. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.h +68 -0
  605. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.cpp +2025 -0
  606. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.h +276 -0
  607. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.cpp +149 -0
  608. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.h +181 -0
  609. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.cpp +1552 -0
  610. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.h +244 -0
  611. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.cpp +107 -0
  612. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.h +168 -0
  613. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.cpp +1979 -0
  614. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.h +437 -0
  615. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.cpp +273 -0
  616. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.h +362 -0
  617. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.cpp +2055 -0
  618. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.h +475 -0
  619. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.cpp +250 -0
  620. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.h +394 -0
  621. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.cpp +57 -0
  622. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.h +59 -0
  623. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.cpp +3424 -0
  624. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.h +210 -0
  625. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressorSimd.h +2145 -0
  626. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.cpp +335 -0
  627. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.h +336 -0
  628. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp +76 -0
  629. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.h +68 -0
  630. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfExport.h +46 -0
  631. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.cpp +768 -0
  632. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.h +148 -0
  633. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.cpp +57 -0
  634. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.h +58 -0
  635. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.cpp +84 -0
  636. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.h +76 -0
  637. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfForward.h +127 -0
  638. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.cpp +228 -0
  639. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.h +386 -0
  640. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.cpp +76 -0
  641. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.h +94 -0
  642. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.cpp +76 -0
  643. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.h +58 -0
  644. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.cpp +112 -0
  645. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.h +62 -0
  646. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.cpp +1283 -0
  647. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.h +699 -0
  648. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.cpp +1114 -0
  649. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.h +82 -0
  650. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.cpp +110 -0
  651. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.h +255 -0
  652. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.cpp +895 -0
  653. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.h +240 -0
  654. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.cpp +114 -0
  655. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.h +84 -0
  656. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.cpp +51 -0
  657. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.h +69 -0
  658. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputStreamMutex.h +68 -0
  659. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInt64.h +56 -0
  660. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.cpp +57 -0
  661. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.h +58 -0
  662. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.cpp +217 -0
  663. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.h +167 -0
  664. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.cpp +99 -0
  665. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.h +73 -0
  666. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrder.h +69 -0
  667. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.cpp +78 -0
  668. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.h +72 -0
  669. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.cpp +178 -0
  670. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.h +188 -0
  671. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.cpp +263 -0
  672. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.h +83 -0
  673. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.cpp +1872 -0
  674. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.h +466 -0
  675. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.cpp +783 -0
  676. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.h +128 -0
  677. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.cpp +519 -0
  678. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.h +118 -0
  679. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.cpp +435 -0
  680. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.h +187 -0
  681. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfName.h +150 -0
  682. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfNamespace.h +115 -0
  683. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.cpp +126 -0
  684. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.h +110 -0
  685. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOptimizedPixelReading.h +646 -0
  686. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.cpp +1378 -0
  687. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.h +263 -0
  688. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.cpp +105 -0
  689. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.h +77 -0
  690. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.cpp +52 -0
  691. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.h +62 -0
  692. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputStreamMutex.h +70 -0
  693. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartHelper.h +262 -0
  694. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.cpp +63 -0
  695. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.h +62 -0
  696. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPixelType.h +67 -0
  697. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.cpp +667 -0
  698. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.h +117 -0
  699. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.cpp +104 -0
  700. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.h +135 -0
  701. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.cpp +103 -0
  702. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.h +70 -0
  703. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.cpp +553 -0
  704. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.h +109 -0
  705. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.cpp +127 -0
  706. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.h +98 -0
  707. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.cpp +74 -0
  708. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.h +69 -0
  709. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgba.h +109 -0
  710. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.cpp +1405 -0
  711. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.h +346 -0
  712. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.cpp +497 -0
  713. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.h +259 -0
  714. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.cpp +157 -0
  715. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.h +63 -0
  716. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.cpp +220 -0
  717. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.h +80 -0
  718. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.cpp +1702 -0
  719. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.h +210 -0
  720. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSimd.h +59 -0
  721. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.cpp +125 -0
  722. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.h +382 -0
  723. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.cpp +242 -0
  724. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.h +160 -0
  725. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.cpp +80 -0
  726. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.h +71 -0
  727. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.cpp +100 -0
  728. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.h +74 -0
  729. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp +129 -0
  730. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.h +172 -0
  731. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.cpp +216 -0
  732. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.h +97 -0
  733. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.cpp +62 -0
  734. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.h +95 -0
  735. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescription.h +107 -0
  736. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.cpp +86 -0
  737. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.h +72 -0
  738. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.cpp +552 -0
  739. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.h +125 -0
  740. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.cpp +1533 -0
  741. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.h +401 -0
  742. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.cpp +208 -0
  743. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.h +100 -0
  744. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.cpp +389 -0
  745. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.h +106 -0
  746. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.cpp +1841 -0
  747. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.h +495 -0
  748. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.cpp +228 -0
  749. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.h +105 -0
  750. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.cpp +1163 -0
  751. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.h +482 -0
  752. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.cpp +431 -0
  753. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.h +242 -0
  754. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.cpp +79 -0
  755. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.h +74 -0
  756. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.cpp +217 -0
  757. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.h +100 -0
  758. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.cpp +60 -0
  759. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.h +136 -0
  760. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.cpp +391 -0
  761. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.h +78 -0
  762. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfXdr.h +927 -0
  763. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.cpp +196 -0
  764. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.h +78 -0
  765. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.cpp +127 -0
  766. data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.h +89 -0
  767. data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.cpp +136 -0
  768. data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.h +16396 -0
  769. data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.cpp +573 -0
  770. data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.h +98334 -0
  771. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.cpp +80 -0
  772. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.h +143 -0
  773. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadExport.h +46 -0
  774. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadForward.h +52 -0
  775. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.cpp +59 -0
  776. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.h +160 -0
  777. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexPosix.cpp +85 -0
  778. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexWin32.cpp +79 -0
  779. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadNamespace.h +114 -0
  780. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.cpp +483 -0
  781. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.h +160 -0
  782. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPosix.cpp +98 -0
  783. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.cpp +60 -0
  784. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.h +112 -0
  785. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosix.cpp +106 -0
  786. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosixCompat.cpp +155 -0
  787. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphoreWin32.cpp +153 -0
  788. data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadWin32.cpp +100 -0
  789. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.cpp +37 -0
  790. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.h +849 -0
  791. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBoxAlgo.h +1016 -0
  792. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColor.h +736 -0
  793. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.cpp +178 -0
  794. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.h +257 -0
  795. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathEuler.h +926 -0
  796. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExc.h +73 -0
  797. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExport.h +46 -0
  798. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathForward.h +72 -0
  799. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrame.h +192 -0
  800. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustum.h +741 -0
  801. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustumTest.h +417 -0
  802. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.cpp +181 -0
  803. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.h +269 -0
  804. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGL.h +166 -0
  805. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGLU.h +54 -0
  806. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathHalfLimits.h +68 -0
  807. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInt64.h +62 -0
  808. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInterval.h +226 -0
  809. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLimits.h +268 -0
  810. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLine.h +185 -0
  811. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLineAlgo.h +288 -0
  812. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMath.h +208 -0
  813. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrix.h +3441 -0
  814. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.cpp +1252 -0
  815. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.h +1425 -0
  816. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathNamespace.h +115 -0
  817. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlane.h +257 -0
  818. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlatform.h +112 -0
  819. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathQuat.h +964 -0
  820. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.cpp +194 -0
  821. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.h +401 -0
  822. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRoots.h +219 -0
  823. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.cpp +54 -0
  824. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.h +656 -0
  825. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathSphere.h +177 -0
  826. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.cpp +583 -0
  827. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.h +2227 -0
  828. data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVecAlgo.h +147 -0
  829. data/vendor/FreeImage/Source/OpenEXR/OpenEXRConfig.h +72 -0
  830. data/vendor/FreeImage/Source/Plugin.h +144 -0
  831. data/vendor/FreeImage/Source/Quantizers.h +354 -0
  832. data/vendor/FreeImage/Source/ToneMapping.h +44 -0
  833. data/vendor/FreeImage/Source/Utilities.h +516 -0
  834. data/vendor/FreeImage/Source/ZLib/adler32.c +179 -0
  835. data/vendor/FreeImage/Source/ZLib/compress.c +80 -0
  836. data/vendor/FreeImage/Source/ZLib/crc32.c +425 -0
  837. data/vendor/FreeImage/Source/ZLib/crc32.h +441 -0
  838. data/vendor/FreeImage/Source/ZLib/deflate.c +1967 -0
  839. data/vendor/FreeImage/Source/ZLib/deflate.h +346 -0
  840. data/vendor/FreeImage/Source/ZLib/gzclose.c +25 -0
  841. data/vendor/FreeImage/Source/ZLib/gzguts.h +209 -0
  842. data/vendor/FreeImage/Source/ZLib/gzlib.c +634 -0
  843. data/vendor/FreeImage/Source/ZLib/gzread.c +594 -0
  844. data/vendor/FreeImage/Source/ZLib/gzwrite.c +577 -0
  845. data/vendor/FreeImage/Source/ZLib/infback.c +640 -0
  846. data/vendor/FreeImage/Source/ZLib/inffast.c +340 -0
  847. data/vendor/FreeImage/Source/ZLib/inffast.h +11 -0
  848. data/vendor/FreeImage/Source/ZLib/inffixed.h +94 -0
  849. data/vendor/FreeImage/Source/ZLib/inflate.c +1512 -0
  850. data/vendor/FreeImage/Source/ZLib/inflate.h +122 -0
  851. data/vendor/FreeImage/Source/ZLib/inftrees.c +306 -0
  852. data/vendor/FreeImage/Source/ZLib/inftrees.h +62 -0
  853. data/vendor/FreeImage/Source/ZLib/trees.c +1226 -0
  854. data/vendor/FreeImage/Source/ZLib/trees.h +128 -0
  855. data/vendor/FreeImage/Source/ZLib/uncompr.c +59 -0
  856. data/vendor/FreeImage/Source/ZLib/zconf.h +511 -0
  857. data/vendor/FreeImage/Source/ZLib/zlib.h +1768 -0
  858. data/vendor/FreeImage/Source/ZLib/zutil.c +324 -0
  859. data/vendor/FreeImage/Source/ZLib/zutil.h +253 -0
  860. metadata +931 -0
@@ -0,0 +1,1115 @@
1
+ // ==========================================================
2
+ // PNG Loader and Writer
3
+ //
4
+ // Design and implementation by
5
+ // - Floris van den Berg (flvdberg@wxs.nl)
6
+ // - Herve Drolon (drolon@infonie.fr)
7
+ // - Detlev Vendt (detlev.vendt@brillit.de)
8
+ // - Aaron Shumate (trek@startreker.com)
9
+ // - Tanner Helland (tannerhelland@users.sf.net)
10
+ //
11
+ // This file is part of FreeImage 3
12
+ //
13
+ // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
14
+ // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
15
+ // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
16
+ // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
17
+ // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
18
+ // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
19
+ // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
20
+ // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
21
+ // THIS DISCLAIMER.
22
+ //
23
+ // Use at your own risk!
24
+ // ==========================================================
25
+
26
+ #ifdef _MSC_VER
27
+ #pragma warning (disable : 4786) // identifier was truncated to 'number' characters
28
+ #endif
29
+
30
+ #include "FreeImage.h"
31
+ #include "Utilities.h"
32
+
33
+ #include "../Metadata/FreeImageTag.h"
34
+
35
+ // ----------------------------------------------------------
36
+
37
+ #define PNG_BYTES_TO_CHECK 8
38
+
39
+ #undef PNG_Z_DEFAULT_COMPRESSION // already used in ../LibPNG/pnglibconf.h
40
+
41
+ // ----------------------------------------------------------
42
+
43
+ #include "../ZLib/zlib.h"
44
+ #include "../LibPNG/png.h"
45
+
46
+ // ----------------------------------------------------------
47
+
48
+ typedef struct {
49
+ FreeImageIO *s_io;
50
+ fi_handle s_handle;
51
+ } fi_ioStructure, *pfi_ioStructure;
52
+
53
+ // ==========================================================
54
+ // libpng interface
55
+ // ==========================================================
56
+
57
+ static void
58
+ _ReadProc(png_structp png_ptr, unsigned char *data, png_size_t size) {
59
+ pfi_ioStructure pfio = (pfi_ioStructure)png_get_io_ptr(png_ptr);
60
+ unsigned n = pfio->s_io->read_proc(data, (unsigned int)size, 1, pfio->s_handle);
61
+ if(size && (n == 0)) {
62
+ throw "Read error: invalid or corrupted PNG file";
63
+ }
64
+ }
65
+
66
+ static void
67
+ _WriteProc(png_structp png_ptr, unsigned char *data, png_size_t size) {
68
+ pfi_ioStructure pfio = (pfi_ioStructure)png_get_io_ptr(png_ptr);
69
+ pfio->s_io->write_proc(data, (unsigned int)size, 1, pfio->s_handle);
70
+ }
71
+
72
+ static void
73
+ _FlushProc(png_structp png_ptr) {
74
+ (png_structp)png_ptr;
75
+ // empty flush implementation
76
+ }
77
+
78
+ static void
79
+ error_handler(png_structp png_ptr, const char *error) {
80
+ (png_structp)png_ptr;
81
+ throw error;
82
+ }
83
+
84
+ // in FreeImage warnings disabled
85
+
86
+ static void
87
+ warning_handler(png_structp png_ptr, const char *warning) {
88
+ (png_structp)png_ptr;
89
+ (char*)warning;
90
+ }
91
+
92
+ // ==========================================================
93
+ // Metadata routines
94
+ // ==========================================================
95
+
96
+ static BOOL
97
+ ReadMetadata(png_structp png_ptr, png_infop info_ptr, FIBITMAP *dib) {
98
+ // XMP keyword
99
+ const char *g_png_xmp_keyword = "XML:com.adobe.xmp";
100
+
101
+ FITAG *tag = NULL;
102
+ png_textp text_ptr = NULL;
103
+ png_timep mod_time = NULL;
104
+ int num_text = 0;
105
+
106
+ // iTXt/tEXt/zTXt chuncks
107
+ if(png_get_text(png_ptr, info_ptr, &text_ptr, &num_text) > 0) {
108
+ for(int i = 0; i < num_text; i++) {
109
+ // create a tag
110
+ tag = FreeImage_CreateTag();
111
+ if(!tag) return FALSE;
112
+
113
+ DWORD tag_length = (DWORD) MAX(text_ptr[i].text_length, text_ptr[i].itxt_length);
114
+
115
+ FreeImage_SetTagLength(tag, tag_length);
116
+ FreeImage_SetTagCount(tag, tag_length);
117
+ FreeImage_SetTagType(tag, FIDT_ASCII);
118
+ FreeImage_SetTagValue(tag, text_ptr[i].text);
119
+
120
+ if(strcmp(text_ptr[i].key, g_png_xmp_keyword) == 0) {
121
+ // store the tag as XMP
122
+ FreeImage_SetTagKey(tag, g_TagLib_XMPFieldName);
123
+ FreeImage_SetMetadata(FIMD_XMP, dib, FreeImage_GetTagKey(tag), tag);
124
+ } else {
125
+ // store the tag as a comment
126
+ FreeImage_SetTagKey(tag, text_ptr[i].key);
127
+ FreeImage_SetMetadata(FIMD_COMMENTS, dib, FreeImage_GetTagKey(tag), tag);
128
+ }
129
+
130
+ // destroy the tag
131
+ FreeImage_DeleteTag(tag);
132
+ }
133
+ }
134
+
135
+ // timestamp chunk
136
+ if(png_get_tIME(png_ptr, info_ptr, &mod_time)) {
137
+ char timestamp[32];
138
+ // create a tag
139
+ tag = FreeImage_CreateTag();
140
+ if(!tag) return FALSE;
141
+
142
+ // convert as 'yyyy:MM:dd hh:mm:ss'
143
+ sprintf(timestamp, "%4d:%02d:%02d %2d:%02d:%02d", mod_time->year, mod_time->month, mod_time->day, mod_time->hour, mod_time->minute, mod_time->second);
144
+
145
+ DWORD tag_length = (DWORD)strlen(timestamp) + 1;
146
+ FreeImage_SetTagLength(tag, tag_length);
147
+ FreeImage_SetTagCount(tag, tag_length);
148
+ FreeImage_SetTagType(tag, FIDT_ASCII);
149
+ FreeImage_SetTagID(tag, TAG_DATETIME);
150
+ FreeImage_SetTagValue(tag, timestamp);
151
+
152
+ // store the tag as Exif-TIFF
153
+ FreeImage_SetTagKey(tag, "DateTime");
154
+ FreeImage_SetMetadata(FIMD_EXIF_MAIN, dib, FreeImage_GetTagKey(tag), tag);
155
+
156
+ // destroy the tag
157
+ FreeImage_DeleteTag(tag);
158
+ }
159
+
160
+ return TRUE;
161
+ }
162
+
163
+ static BOOL
164
+ WriteMetadata(png_structp png_ptr, png_infop info_ptr, FIBITMAP *dib) {
165
+ // XMP keyword
166
+ const char *g_png_xmp_keyword = "XML:com.adobe.xmp";
167
+
168
+ FITAG *tag = NULL;
169
+ FIMETADATA *mdhandle = NULL;
170
+ BOOL bResult = TRUE;
171
+
172
+ png_text text_metadata;
173
+ png_time mod_time;
174
+
175
+ // set the 'Comments' metadata as iTXt chuncks
176
+
177
+ mdhandle = FreeImage_FindFirstMetadata(FIMD_COMMENTS, dib, &tag);
178
+
179
+ if(mdhandle) {
180
+ do {
181
+ memset(&text_metadata, 0, sizeof(png_text));
182
+ text_metadata.compression = 1; // iTXt, none
183
+ text_metadata.key = (char*)FreeImage_GetTagKey(tag); // keyword, 1-79 character description of "text"
184
+ text_metadata.text = (char*)FreeImage_GetTagValue(tag); // comment, may be an empty string (ie "")
185
+ text_metadata.text_length = FreeImage_GetTagLength(tag);// length of the text string
186
+ text_metadata.itxt_length = FreeImage_GetTagLength(tag);// length of the itxt string
187
+ text_metadata.lang = 0; // language code, 0-79 characters or a NULL pointer
188
+ text_metadata.lang_key = 0; // keyword translated UTF-8 string, 0 or more chars or a NULL pointer
189
+
190
+ // set the tag
191
+ png_set_text(png_ptr, info_ptr, &text_metadata, 1);
192
+
193
+ } while(FreeImage_FindNextMetadata(mdhandle, &tag));
194
+
195
+ FreeImage_FindCloseMetadata(mdhandle);
196
+ bResult &= TRUE;
197
+ }
198
+
199
+ // set the 'XMP' metadata as iTXt chuncks
200
+ tag = NULL;
201
+ FreeImage_GetMetadata(FIMD_XMP, dib, g_TagLib_XMPFieldName, &tag);
202
+ if(tag && FreeImage_GetTagLength(tag)) {
203
+ memset(&text_metadata, 0, sizeof(png_text));
204
+ text_metadata.compression = 1; // iTXt, none
205
+ text_metadata.key = (char*)g_png_xmp_keyword; // keyword, 1-79 character description of "text"
206
+ text_metadata.text = (char*)FreeImage_GetTagValue(tag); // comment, may be an empty string (ie "")
207
+ text_metadata.text_length = FreeImage_GetTagLength(tag);// length of the text string
208
+ text_metadata.itxt_length = FreeImage_GetTagLength(tag);// length of the itxt string
209
+ text_metadata.lang = 0; // language code, 0-79 characters or a NULL pointer
210
+ text_metadata.lang_key = 0; // keyword translated UTF-8 string, 0 or more chars or a NULL pointer
211
+
212
+ // set the tag
213
+ png_set_text(png_ptr, info_ptr, &text_metadata, 1);
214
+ bResult &= TRUE;
215
+ }
216
+
217
+ // set the Exif-TIFF 'DateTime' metadata as a tIME chunk
218
+ tag = NULL;
219
+ FreeImage_GetMetadata(FIMD_EXIF_MAIN, dib, "DateTime", &tag);
220
+ if(tag && FreeImage_GetTagLength(tag)) {
221
+ int year, month, day, hour, minute, second;
222
+ const char *value = (char*)FreeImage_GetTagValue(tag);
223
+ if(sscanf(value, "%4d:%02d:%02d %2d:%02d:%02d", &year, &month, &day, &hour, &minute, &second) == 6) {
224
+ mod_time.year = (png_uint_16)year;
225
+ mod_time.month = (png_byte)month;
226
+ mod_time.day = (png_byte)day;
227
+ mod_time.hour = (png_byte)hour;
228
+ mod_time.minute = (png_byte)minute;
229
+ mod_time.second = (png_byte)second;
230
+ png_set_tIME (png_ptr, info_ptr, &mod_time);
231
+ }
232
+ }
233
+
234
+ return bResult;
235
+ }
236
+
237
+ // ==========================================================
238
+ // Plugin Interface
239
+ // ==========================================================
240
+
241
+ static int s_format_id;
242
+
243
+ // ==========================================================
244
+ // Plugin Implementation
245
+ // ==========================================================
246
+
247
+ static const char * DLL_CALLCONV
248
+ Format() {
249
+ return "PNG";
250
+ }
251
+
252
+ static const char * DLL_CALLCONV
253
+ Description() {
254
+ return "Portable Network Graphics";
255
+ }
256
+
257
+ static const char * DLL_CALLCONV
258
+ Extension() {
259
+ return "png";
260
+ }
261
+
262
+ static const char * DLL_CALLCONV
263
+ RegExpr() {
264
+ return "^.PNG\r";
265
+ }
266
+
267
+ static const char * DLL_CALLCONV
268
+ MimeType() {
269
+ return "image/png";
270
+ }
271
+
272
+ static BOOL DLL_CALLCONV
273
+ Validate(FreeImageIO *io, fi_handle handle) {
274
+ BYTE png_signature[8] = { 137, 80, 78, 71, 13, 10, 26, 10 };
275
+ BYTE signature[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
276
+
277
+ io->read_proc(&signature, 1, 8, handle);
278
+
279
+ return (memcmp(png_signature, signature, 8) == 0);
280
+ }
281
+
282
+ static BOOL DLL_CALLCONV
283
+ SupportsExportDepth(int depth) {
284
+ return (
285
+ (depth == 1) ||
286
+ (depth == 4) ||
287
+ (depth == 8) ||
288
+ (depth == 24) ||
289
+ (depth == 32)
290
+ );
291
+ }
292
+
293
+ static BOOL DLL_CALLCONV
294
+ SupportsExportType(FREE_IMAGE_TYPE type) {
295
+ return (
296
+ (type == FIT_BITMAP) ||
297
+ (type == FIT_UINT16) ||
298
+ (type == FIT_RGB16) ||
299
+ (type == FIT_RGBA16)
300
+ );
301
+ }
302
+
303
+ static BOOL DLL_CALLCONV
304
+ SupportsICCProfiles() {
305
+ return TRUE;
306
+ }
307
+
308
+ static BOOL DLL_CALLCONV
309
+ SupportsNoPixels() {
310
+ return TRUE;
311
+ }
312
+
313
+ // --------------------------------------------------------------------------
314
+
315
+ /**
316
+ Configure the decoder so that decoded pixels are compatible with a FREE_IMAGE_TYPE format.
317
+ Set conversion instructions as needed.
318
+ @param png_ptr PNG handle
319
+ @param info_ptr PNG info handle
320
+ @param flags Decoder flags
321
+ @param output_image_type Returned FreeImage converted image type
322
+ @return Returns TRUE if successful, returns FALSE otherwise
323
+ @see png_read_update_info
324
+ */
325
+ static BOOL
326
+ ConfigureDecoder(png_structp png_ptr, png_infop info_ptr, int flags, FREE_IMAGE_TYPE *output_image_type) {
327
+ // get original image info
328
+ const int color_type = png_get_color_type(png_ptr, info_ptr);
329
+ const int bit_depth = png_get_bit_depth(png_ptr, info_ptr);
330
+ const int pixel_depth = bit_depth * png_get_channels(png_ptr, info_ptr);
331
+
332
+ FREE_IMAGE_TYPE image_type = FIT_BITMAP; // assume standard image type
333
+
334
+ // check for transparency table or single transparent color
335
+ BOOL bIsTransparent = png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) == PNG_INFO_tRNS ? TRUE : FALSE;
336
+
337
+ // check allowed combinations of colour type and bit depth
338
+ // then get converted FreeImage type
339
+
340
+ switch(color_type) {
341
+ case PNG_COLOR_TYPE_GRAY: // color type '0', bitdepth = 1, 2, 4, 8, 16
342
+ switch(bit_depth) {
343
+ case 1:
344
+ case 2:
345
+ case 4:
346
+ case 8:
347
+ // expand grayscale images to the full 8-bit from 2-bit/pixel
348
+ if (pixel_depth == 2) {
349
+ png_set_expand_gray_1_2_4_to_8(png_ptr);
350
+ }
351
+
352
+ // if a tRNS chunk is provided, we must also expand the grayscale data to 8-bits,
353
+ // this allows us to make use of the transparency table with existing FreeImage methods
354
+ if (bIsTransparent && (pixel_depth < 8)) {
355
+ png_set_expand_gray_1_2_4_to_8(png_ptr);
356
+ }
357
+ break;
358
+
359
+ case 16:
360
+ image_type = (pixel_depth == 16) ? FIT_UINT16 : FIT_UNKNOWN;
361
+
362
+ // 16-bit grayscale images can contain a transparent value (shade)
363
+ // if found, expand the transparent value to a full alpha channel
364
+ if (bIsTransparent && (image_type != FIT_UNKNOWN)) {
365
+ // expand tRNS to a full alpha channel
366
+ png_set_tRNS_to_alpha(png_ptr);
367
+
368
+ // expand new 16-bit gray + 16-bit alpha to full 64-bit RGBA
369
+ png_set_gray_to_rgb(png_ptr);
370
+
371
+ image_type = FIT_RGBA16;
372
+ }
373
+ break;
374
+
375
+ default:
376
+ image_type = FIT_UNKNOWN;
377
+ break;
378
+ }
379
+ break;
380
+
381
+ case PNG_COLOR_TYPE_RGB: // color type '2', bitdepth = 8, 16
382
+ switch(bit_depth) {
383
+ case 8:
384
+ image_type = (pixel_depth == 24) ? FIT_BITMAP : FIT_UNKNOWN;
385
+ break;
386
+ case 16:
387
+ image_type = (pixel_depth == 48) ? FIT_RGB16 : FIT_UNKNOWN;
388
+ break;
389
+ default:
390
+ image_type = FIT_UNKNOWN;
391
+ break;
392
+ }
393
+ // sometimes, 24- or 48-bit images may contain transparency information
394
+ // check for this use case and convert to an alpha-compatible format
395
+ if (bIsTransparent && (image_type != FIT_UNKNOWN)) {
396
+ // if the image is 24-bit RGB, mark it as 32-bit; if it is 48-bit, mark it as 64-bit
397
+ image_type = (pixel_depth == 24) ? FIT_BITMAP : (pixel_depth == 48) ? FIT_RGBA16 : FIT_UNKNOWN;
398
+ // expand tRNS chunk to alpha channel
399
+ png_set_tRNS_to_alpha(png_ptr);
400
+ }
401
+ break;
402
+
403
+ case PNG_COLOR_TYPE_PALETTE: // color type '3', bitdepth = 1, 2, 4, 8
404
+ switch(bit_depth) {
405
+ case 1:
406
+ case 2:
407
+ case 4:
408
+ case 8:
409
+ // expand palette images to the full 8 bits from 2 bits/pixel
410
+ if (pixel_depth == 2) {
411
+ png_set_packing(png_ptr);
412
+ }
413
+
414
+ // if a tRNS chunk is provided, we must also expand the palletized data to 8-bits,
415
+ // this allows us to make use of the transparency table with existing FreeImage methods
416
+ if (bIsTransparent && (pixel_depth < 8)) {
417
+ png_set_packing(png_ptr);
418
+ }
419
+ break;
420
+
421
+ default:
422
+ image_type = FIT_UNKNOWN;
423
+ break;
424
+ }
425
+ break;
426
+
427
+ case PNG_COLOR_TYPE_GRAY_ALPHA: // color type '4', bitdepth = 8, 16
428
+ switch(bit_depth) {
429
+ case 8:
430
+ // 8-bit grayscale + 8-bit alpha => convert to 32-bit RGBA
431
+ image_type = (pixel_depth == 16) ? FIT_BITMAP : FIT_UNKNOWN;
432
+ break;
433
+ case 16:
434
+ // 16-bit grayscale + 16-bit alpha => convert to 64-bit RGBA
435
+ image_type = (pixel_depth == 32) ? FIT_RGBA16 : FIT_UNKNOWN;
436
+ break;
437
+ default:
438
+ image_type = FIT_UNKNOWN;
439
+ break;
440
+ }
441
+ // expand 8-bit greyscale + 8-bit alpha to 32-bit
442
+ // expand 16-bit greyscale + 16-bit alpha to 64-bit
443
+ png_set_gray_to_rgb(png_ptr);
444
+ break;
445
+
446
+ case PNG_COLOR_TYPE_RGB_ALPHA: // color type '6', bitdepth = 8, 16
447
+ switch(bit_depth) {
448
+ case 8:
449
+ break;
450
+ case 16:
451
+ image_type = (pixel_depth == 64) ? FIT_RGBA16 : FIT_UNKNOWN;
452
+ break;
453
+ default:
454
+ image_type = FIT_UNKNOWN;
455
+ break;
456
+ }
457
+ break;
458
+ }
459
+
460
+ // check for unknown or invalid formats
461
+ if(image_type == FIT_UNKNOWN) {
462
+ *output_image_type = image_type;
463
+ return FALSE;
464
+ }
465
+
466
+ #ifndef FREEIMAGE_BIGENDIAN
467
+ if((image_type == FIT_UINT16) || (image_type == FIT_RGB16) || (image_type == FIT_RGBA16)) {
468
+ // turn on 16-bit byte swapping
469
+ png_set_swap(png_ptr);
470
+ }
471
+ #endif
472
+
473
+ #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
474
+ if((image_type == FIT_BITMAP) && ((color_type == PNG_COLOR_TYPE_RGB) || (color_type == PNG_COLOR_TYPE_RGB_ALPHA))) {
475
+ // flip the RGB pixels to BGR (or RGBA to BGRA)
476
+ png_set_bgr(png_ptr);
477
+ }
478
+ #endif
479
+
480
+ // gamma correction
481
+ // unlike the example in the libpng documentation, we have *no* idea where
482
+ // this file may have come from--so if it doesn't have a file gamma, don't
483
+ // do any correction ("do no harm")
484
+
485
+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_gAMA)) {
486
+ double gamma = 0;
487
+ double screen_gamma = 2.2;
488
+
489
+ if (png_get_gAMA(png_ptr, info_ptr, &gamma) && ( flags & PNG_IGNOREGAMMA ) != PNG_IGNOREGAMMA) {
490
+ png_set_gamma(png_ptr, screen_gamma, gamma);
491
+ }
492
+ }
493
+
494
+ // all transformations have been registered; now update info_ptr data
495
+ png_read_update_info(png_ptr, info_ptr);
496
+
497
+ // return the output image type
498
+ *output_image_type = image_type;
499
+
500
+ return TRUE;
501
+ }
502
+
503
+ static FIBITMAP * DLL_CALLCONV
504
+ Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
505
+ png_structp png_ptr = NULL;
506
+ png_infop info_ptr = NULL;
507
+ png_uint_32 width, height;
508
+ int color_type;
509
+ int bit_depth;
510
+ int pixel_depth = 0; // pixel_depth = bit_depth * channels
511
+
512
+ FIBITMAP *dib = NULL;
513
+ png_bytepp row_pointers = NULL;
514
+
515
+ fi_ioStructure fio;
516
+ fio.s_handle = handle;
517
+ fio.s_io = io;
518
+
519
+ if (handle) {
520
+ BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS;
521
+
522
+ try {
523
+ // check to see if the file is in fact a PNG file
524
+
525
+ BYTE png_check[PNG_BYTES_TO_CHECK];
526
+
527
+ io->read_proc(png_check, PNG_BYTES_TO_CHECK, 1, handle);
528
+
529
+ if (png_sig_cmp(png_check, (png_size_t)0, PNG_BYTES_TO_CHECK) != 0) {
530
+ return NULL; // Bad signature
531
+ }
532
+
533
+ // create the chunk manage structure
534
+
535
+ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, error_handler, warning_handler);
536
+
537
+ if (!png_ptr) {
538
+ return NULL;
539
+ }
540
+
541
+ // create the info structure
542
+
543
+ info_ptr = png_create_info_struct(png_ptr);
544
+
545
+ if (!info_ptr) {
546
+ png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
547
+ return NULL;
548
+ }
549
+
550
+ // init the IO
551
+
552
+ png_set_read_fn(png_ptr, &fio, _ReadProc);
553
+
554
+ if (setjmp(png_jmpbuf(png_ptr))) {
555
+ png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
556
+ return NULL;
557
+ }
558
+
559
+ // because we have already read the signature...
560
+
561
+ png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK);
562
+
563
+ // read the IHDR chunk
564
+
565
+ png_read_info(png_ptr, info_ptr);
566
+ png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, NULL, NULL, NULL);
567
+
568
+ // configure the decoder
569
+
570
+ FREE_IMAGE_TYPE image_type = FIT_BITMAP;
571
+
572
+ if(!ConfigureDecoder(png_ptr, info_ptr, flags, &image_type)) {
573
+ throw FI_MSG_ERROR_UNSUPPORTED_FORMAT;
574
+ }
575
+
576
+ // update image info
577
+
578
+ color_type = png_get_color_type(png_ptr, info_ptr);
579
+ bit_depth = png_get_bit_depth(png_ptr, info_ptr);
580
+ pixel_depth = bit_depth * png_get_channels(png_ptr, info_ptr);
581
+
582
+ // create a dib and write the bitmap header
583
+ // set up the dib palette, if needed
584
+
585
+ switch (color_type) {
586
+ case PNG_COLOR_TYPE_RGB:
587
+ case PNG_COLOR_TYPE_RGB_ALPHA:
588
+ dib = FreeImage_AllocateHeaderT(header_only, image_type, width, height, pixel_depth, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
589
+ break;
590
+
591
+ case PNG_COLOR_TYPE_PALETTE:
592
+ dib = FreeImage_AllocateHeaderT(header_only, image_type, width, height, pixel_depth, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
593
+ if(dib) {
594
+ png_colorp png_palette = NULL;
595
+ int palette_entries = 0;
596
+
597
+ png_get_PLTE(png_ptr,info_ptr, &png_palette, &palette_entries);
598
+
599
+ palette_entries = MIN((unsigned)palette_entries, FreeImage_GetColorsUsed(dib));
600
+
601
+ // store the palette
602
+
603
+ RGBQUAD *palette = FreeImage_GetPalette(dib);
604
+ for(int i = 0; i < palette_entries; i++) {
605
+ palette[i].rgbRed = png_palette[i].red;
606
+ palette[i].rgbGreen = png_palette[i].green;
607
+ palette[i].rgbBlue = png_palette[i].blue;
608
+ }
609
+ }
610
+ break;
611
+
612
+ case PNG_COLOR_TYPE_GRAY:
613
+ dib = FreeImage_AllocateHeaderT(header_only, image_type, width, height, pixel_depth, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
614
+
615
+ if(dib && (pixel_depth <= 8)) {
616
+ RGBQUAD *palette = FreeImage_GetPalette(dib);
617
+ const int palette_entries = 1 << pixel_depth;
618
+
619
+ for(int i = 0; i < palette_entries; i++) {
620
+ palette[i].rgbRed =
621
+ palette[i].rgbGreen =
622
+ palette[i].rgbBlue = (BYTE)((i * 255) / (palette_entries - 1));
623
+ }
624
+ }
625
+ break;
626
+
627
+ default:
628
+ throw FI_MSG_ERROR_UNSUPPORTED_FORMAT;
629
+ }
630
+
631
+ if(!dib) {
632
+ throw FI_MSG_ERROR_DIB_MEMORY;
633
+ }
634
+
635
+ // store the transparency table
636
+
637
+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
638
+ // array of alpha (transparency) entries for palette
639
+ png_bytep trans_alpha = NULL;
640
+ // number of transparent entries
641
+ int num_trans = 0;
642
+ // graylevel or color sample values of the single transparent color for non-paletted images
643
+ png_color_16p trans_color = NULL;
644
+
645
+ png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
646
+
647
+ if((color_type == PNG_COLOR_TYPE_GRAY) && trans_color) {
648
+ // single transparent color
649
+ if (trans_color->gray < 256) {
650
+ BYTE table[256];
651
+ memset(table, 0xFF, 256);
652
+ table[trans_color->gray] = 0;
653
+ FreeImage_SetTransparencyTable(dib, table, 256);
654
+ }
655
+ // check for a full transparency table, too
656
+ else if ((trans_alpha) && (pixel_depth <= 8)) {
657
+ FreeImage_SetTransparencyTable(dib, (BYTE *)trans_alpha, num_trans);
658
+ }
659
+
660
+ } else if((color_type == PNG_COLOR_TYPE_PALETTE) && trans_alpha) {
661
+ // transparency table
662
+ FreeImage_SetTransparencyTable(dib, (BYTE *)trans_alpha, num_trans);
663
+ }
664
+ }
665
+
666
+ // store the background color (only supported for FIT_BITMAP types)
667
+
668
+ if ((image_type == FIT_BITMAP) && png_get_valid(png_ptr, info_ptr, PNG_INFO_bKGD)) {
669
+ // Get the background color to draw transparent and alpha images over.
670
+ // Note that even if the PNG file supplies a background, you are not required to
671
+ // use it - you should use the (solid) application background if it has one.
672
+
673
+ png_color_16p image_background = NULL;
674
+ RGBQUAD rgbBkColor;
675
+
676
+ if (png_get_bKGD(png_ptr, info_ptr, &image_background)) {
677
+ rgbBkColor.rgbRed = (BYTE)image_background->red;
678
+ rgbBkColor.rgbGreen = (BYTE)image_background->green;
679
+ rgbBkColor.rgbBlue = (BYTE)image_background->blue;
680
+ rgbBkColor.rgbReserved = 0;
681
+
682
+ FreeImage_SetBackgroundColor(dib, &rgbBkColor);
683
+ }
684
+ }
685
+
686
+ // get physical resolution
687
+
688
+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_pHYs)) {
689
+ png_uint_32 res_x, res_y;
690
+
691
+ // we'll overload this var and use 0 to mean no phys data,
692
+ // since if it's not in meters we can't use it anyway
693
+
694
+ int res_unit_type = PNG_RESOLUTION_UNKNOWN;
695
+
696
+ png_get_pHYs(png_ptr,info_ptr, &res_x, &res_y, &res_unit_type);
697
+
698
+ if (res_unit_type == PNG_RESOLUTION_METER) {
699
+ FreeImage_SetDotsPerMeterX(dib, res_x);
700
+ FreeImage_SetDotsPerMeterY(dib, res_y);
701
+ }
702
+ }
703
+
704
+ // get possible ICC profile
705
+
706
+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_iCCP)) {
707
+ png_charp profile_name = NULL;
708
+ png_bytep profile_data = NULL;
709
+ png_uint_32 profile_length = 0;
710
+ int compression_type;
711
+
712
+ png_get_iCCP(png_ptr, info_ptr, &profile_name, &compression_type, &profile_data, &profile_length);
713
+
714
+ // copy ICC profile data (must be done after FreeImage_AllocateHeader)
715
+
716
+ FreeImage_CreateICCProfile(dib, profile_data, profile_length);
717
+ }
718
+
719
+ // --- header only mode => clean-up and return
720
+
721
+ if (header_only) {
722
+ // get possible metadata (it can be located both before and after the image data)
723
+ ReadMetadata(png_ptr, info_ptr, dib);
724
+ if (png_ptr) {
725
+ // clean up after the read, and free any memory allocated - REQUIRED
726
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
727
+ }
728
+ return dib;
729
+ }
730
+
731
+ // set the individual row_pointers to point at the correct offsets
732
+
733
+ row_pointers = (png_bytepp)malloc(height * sizeof(png_bytep));
734
+
735
+ if (!row_pointers) {
736
+ png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
737
+ FreeImage_Unload(dib);
738
+ return NULL;
739
+ }
740
+
741
+ // read in the bitmap bits via the pointer table
742
+ // allow loading of PNG with minor errors (such as images with several IDAT chunks)
743
+
744
+ for (png_uint_32 k = 0; k < height; k++) {
745
+ row_pointers[height - 1 - k] = FreeImage_GetScanLine(dib, k);
746
+ }
747
+
748
+ png_set_benign_errors(png_ptr, 1);
749
+ png_read_image(png_ptr, row_pointers);
750
+
751
+ // check if the bitmap contains transparency, if so enable it in the header
752
+
753
+ if (FreeImage_GetBPP(dib) == 32) {
754
+ if (FreeImage_GetColorType(dib) == FIC_RGBALPHA) {
755
+ FreeImage_SetTransparent(dib, TRUE);
756
+ } else {
757
+ FreeImage_SetTransparent(dib, FALSE);
758
+ }
759
+ }
760
+
761
+ // cleanup
762
+
763
+ if (row_pointers) {
764
+ free(row_pointers);
765
+ row_pointers = NULL;
766
+ }
767
+
768
+ // read the rest of the file, getting any additional chunks in info_ptr
769
+
770
+ png_read_end(png_ptr, info_ptr);
771
+
772
+ // get possible metadata (it can be located both before and after the image data)
773
+
774
+ ReadMetadata(png_ptr, info_ptr, dib);
775
+
776
+ if (png_ptr) {
777
+ // clean up after the read, and free any memory allocated - REQUIRED
778
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
779
+ }
780
+
781
+ return dib;
782
+
783
+ } catch (const char *text) {
784
+ if (png_ptr) {
785
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
786
+ }
787
+ if (row_pointers) {
788
+ free(row_pointers);
789
+ }
790
+ if (dib) {
791
+ FreeImage_Unload(dib);
792
+ }
793
+ FreeImage_OutputMessageProc(s_format_id, text);
794
+
795
+ return NULL;
796
+ }
797
+ }
798
+
799
+ return NULL;
800
+ }
801
+
802
+ // --------------------------------------------------------------------------
803
+
804
+ static BOOL DLL_CALLCONV
805
+ Save(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data) {
806
+ png_structp png_ptr;
807
+ png_infop info_ptr;
808
+ png_colorp palette = NULL;
809
+ png_uint_32 width, height;
810
+ BOOL has_alpha_channel = FALSE;
811
+
812
+ RGBQUAD *pal; // pointer to dib palette
813
+ int bit_depth, pixel_depth; // pixel_depth = bit_depth * channels
814
+ int palette_entries;
815
+ int interlace_type;
816
+
817
+ fi_ioStructure fio;
818
+ fio.s_handle = handle;
819
+ fio.s_io = io;
820
+
821
+ if ((dib) && (handle)) {
822
+ try {
823
+ // create the chunk manage structure
824
+
825
+ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, error_handler, warning_handler);
826
+
827
+ if (!png_ptr) {
828
+ return FALSE;
829
+ }
830
+
831
+ // allocate/initialize the image information data.
832
+
833
+ info_ptr = png_create_info_struct(png_ptr);
834
+
835
+ if (!info_ptr) {
836
+ png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
837
+ return FALSE;
838
+ }
839
+
840
+ // Set error handling. REQUIRED if you aren't supplying your own
841
+ // error handling functions in the png_create_write_struct() call.
842
+
843
+ if (setjmp(png_jmpbuf(png_ptr))) {
844
+ // if we get here, we had a problem reading the file
845
+
846
+ png_destroy_write_struct(&png_ptr, &info_ptr);
847
+
848
+ return FALSE;
849
+ }
850
+
851
+ // init the IO
852
+
853
+ png_set_write_fn(png_ptr, &fio, _WriteProc, _FlushProc);
854
+
855
+ // set physical resolution
856
+
857
+ png_uint_32 res_x = (png_uint_32)FreeImage_GetDotsPerMeterX(dib);
858
+ png_uint_32 res_y = (png_uint_32)FreeImage_GetDotsPerMeterY(dib);
859
+
860
+ if ((res_x > 0) && (res_y > 0)) {
861
+ png_set_pHYs(png_ptr, info_ptr, res_x, res_y, PNG_RESOLUTION_METER);
862
+ }
863
+
864
+ // Set the image information here. Width and height are up to 2^31,
865
+ // bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
866
+ // the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
867
+ // PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
868
+ // or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or
869
+ // PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
870
+ // currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED
871
+
872
+ width = FreeImage_GetWidth(dib);
873
+ height = FreeImage_GetHeight(dib);
874
+ pixel_depth = FreeImage_GetBPP(dib);
875
+
876
+ BOOL bInterlaced = FALSE;
877
+ if( (flags & PNG_INTERLACED) == PNG_INTERLACED) {
878
+ interlace_type = PNG_INTERLACE_ADAM7;
879
+ bInterlaced = TRUE;
880
+ } else {
881
+ interlace_type = PNG_INTERLACE_NONE;
882
+ }
883
+
884
+ // set the ZLIB compression level or default to PNG default compression level (ZLIB level = 6)
885
+ int zlib_level = flags & 0x0F;
886
+ if((zlib_level >= 1) && (zlib_level <= 9)) {
887
+ png_set_compression_level(png_ptr, zlib_level);
888
+ } else if((flags & PNG_Z_NO_COMPRESSION) == PNG_Z_NO_COMPRESSION) {
889
+ png_set_compression_level(png_ptr, Z_NO_COMPRESSION);
890
+ }
891
+
892
+ // filtered strategy works better for high color images
893
+ if(pixel_depth >= 16){
894
+ png_set_compression_strategy(png_ptr, Z_FILTERED);
895
+ png_set_filter(png_ptr, 0, PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_PAETH);
896
+ } else {
897
+ png_set_compression_strategy(png_ptr, Z_DEFAULT_STRATEGY);
898
+ }
899
+
900
+ FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib);
901
+ if(image_type == FIT_BITMAP) {
902
+ // standard image type
903
+ bit_depth = (pixel_depth > 8) ? 8 : pixel_depth;
904
+ } else {
905
+ // 16-bit greyscale or 16-bit RGB(A)
906
+ bit_depth = 16;
907
+ }
908
+
909
+ // check for transparent images
910
+ BOOL bIsTransparent =
911
+ (image_type == FIT_BITMAP) && FreeImage_IsTransparent(dib) && (FreeImage_GetTransparencyCount(dib) > 0) ? TRUE : FALSE;
912
+
913
+ switch (FreeImage_GetColorType(dib)) {
914
+ case FIC_MINISWHITE:
915
+ if(!bIsTransparent) {
916
+ // Invert monochrome files to have 0 as black and 1 as white (no break here)
917
+ png_set_invert_mono(png_ptr);
918
+ }
919
+ // (fall through)
920
+
921
+ case FIC_MINISBLACK:
922
+ if(!bIsTransparent) {
923
+ png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
924
+ PNG_COLOR_TYPE_GRAY, interlace_type,
925
+ PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
926
+ break;
927
+ }
928
+ // If a monochrome image is transparent, save it with a palette
929
+ // (fall through)
930
+
931
+ case FIC_PALETTE:
932
+ {
933
+ png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
934
+ PNG_COLOR_TYPE_PALETTE, interlace_type,
935
+ PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
936
+
937
+ // set the palette
938
+
939
+ palette_entries = 1 << bit_depth;
940
+ palette = (png_colorp)png_malloc(png_ptr, palette_entries * sizeof (png_color));
941
+ pal = FreeImage_GetPalette(dib);
942
+
943
+ for (int i = 0; i < palette_entries; i++) {
944
+ palette[i].red = pal[i].rgbRed;
945
+ palette[i].green = pal[i].rgbGreen;
946
+ palette[i].blue = pal[i].rgbBlue;
947
+ }
948
+
949
+ png_set_PLTE(png_ptr, info_ptr, palette, palette_entries);
950
+
951
+ // You must not free palette here, because png_set_PLTE only makes a link to
952
+ // the palette that you malloced. Wait until you are about to destroy
953
+ // the png structure.
954
+
955
+ break;
956
+ }
957
+
958
+ case FIC_RGBALPHA :
959
+ has_alpha_channel = TRUE;
960
+
961
+ png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
962
+ PNG_COLOR_TYPE_RGBA, interlace_type,
963
+ PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
964
+
965
+ #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
966
+ // flip BGR pixels to RGB
967
+ if(image_type == FIT_BITMAP) {
968
+ png_set_bgr(png_ptr);
969
+ }
970
+ #endif
971
+ break;
972
+
973
+ case FIC_RGB:
974
+ png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
975
+ PNG_COLOR_TYPE_RGB, interlace_type,
976
+ PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
977
+
978
+ #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
979
+ // flip BGR pixels to RGB
980
+ if(image_type == FIT_BITMAP) {
981
+ png_set_bgr(png_ptr);
982
+ }
983
+ #endif
984
+ break;
985
+
986
+ case FIC_CMYK:
987
+ break;
988
+ }
989
+
990
+ // write possible ICC profile
991
+
992
+ FIICCPROFILE *iccProfile = FreeImage_GetICCProfile(dib);
993
+ if (iccProfile->size && iccProfile->data) {
994
+ png_set_iCCP(png_ptr, info_ptr, "Embedded Profile", 0, (png_const_bytep)iccProfile->data, iccProfile->size);
995
+ }
996
+
997
+ // write metadata
998
+
999
+ WriteMetadata(png_ptr, info_ptr, dib);
1000
+
1001
+ // Optional gamma chunk is strongly suggested if you have any guess
1002
+ // as to the correct gamma of the image.
1003
+ // png_set_gAMA(png_ptr, info_ptr, gamma);
1004
+
1005
+ // set the transparency table
1006
+
1007
+ if (bIsTransparent) {
1008
+ png_set_tRNS(png_ptr, info_ptr, FreeImage_GetTransparencyTable(dib), FreeImage_GetTransparencyCount(dib), NULL);
1009
+ }
1010
+
1011
+ // set the background color
1012
+
1013
+ if(FreeImage_HasBackgroundColor(dib)) {
1014
+ png_color_16 image_background;
1015
+ RGBQUAD rgbBkColor;
1016
+
1017
+ FreeImage_GetBackgroundColor(dib, &rgbBkColor);
1018
+ memset(&image_background, 0, sizeof(png_color_16));
1019
+ image_background.blue = rgbBkColor.rgbBlue;
1020
+ image_background.green = rgbBkColor.rgbGreen;
1021
+ image_background.red = rgbBkColor.rgbRed;
1022
+ image_background.index = rgbBkColor.rgbReserved;
1023
+
1024
+ png_set_bKGD(png_ptr, info_ptr, &image_background);
1025
+ }
1026
+
1027
+ // Write the file header information.
1028
+
1029
+ png_write_info(png_ptr, info_ptr);
1030
+
1031
+ // write out the image data
1032
+
1033
+ #ifndef FREEIMAGE_BIGENDIAN
1034
+ if (bit_depth == 16) {
1035
+ // turn on 16 bit byte swapping
1036
+ png_set_swap(png_ptr);
1037
+ }
1038
+ #endif
1039
+
1040
+ int number_passes = 1;
1041
+ if (bInterlaced) {
1042
+ number_passes = png_set_interlace_handling(png_ptr);
1043
+ }
1044
+
1045
+ if ((pixel_depth == 32) && (!has_alpha_channel)) {
1046
+ BYTE *buffer = (BYTE *)malloc(width * 3);
1047
+
1048
+ // transparent conversion to 24-bit
1049
+ // the number of passes is either 1 for non-interlaced images, or 7 for interlaced images
1050
+ for (int pass = 0; pass < number_passes; pass++) {
1051
+ for (png_uint_32 k = 0; k < height; k++) {
1052
+ FreeImage_ConvertLine32To24(buffer, FreeImage_GetScanLine(dib, height - k - 1), width);
1053
+ png_write_row(png_ptr, buffer);
1054
+ }
1055
+ }
1056
+ free(buffer);
1057
+ } else {
1058
+ // the number of passes is either 1 for non-interlaced images, or 7 for interlaced images
1059
+ for (int pass = 0; pass < number_passes; pass++) {
1060
+ for (png_uint_32 k = 0; k < height; k++) {
1061
+ png_write_row(png_ptr, FreeImage_GetScanLine(dib, height - k - 1));
1062
+ }
1063
+ }
1064
+ }
1065
+
1066
+ // It is REQUIRED to call this to finish writing the rest of the file
1067
+ // Bug with png_flush
1068
+
1069
+ png_write_end(png_ptr, info_ptr);
1070
+
1071
+ // clean up after the write, and free any memory allocated
1072
+ if (palette) {
1073
+ png_free(png_ptr, palette);
1074
+ }
1075
+
1076
+ png_destroy_write_struct(&png_ptr, &info_ptr);
1077
+
1078
+ return TRUE;
1079
+
1080
+ } catch (const char *text) {
1081
+ if(png_ptr) {
1082
+ png_destroy_write_struct(&png_ptr, &info_ptr);
1083
+ }
1084
+ FreeImage_OutputMessageProc(s_format_id, text);
1085
+ }
1086
+ }
1087
+
1088
+ return FALSE;
1089
+ }
1090
+
1091
+ // ==========================================================
1092
+ // Init
1093
+ // ==========================================================
1094
+
1095
+ void DLL_CALLCONV
1096
+ InitPNG(Plugin *plugin, int format_id) {
1097
+ s_format_id = format_id;
1098
+
1099
+ plugin->format_proc = Format;
1100
+ plugin->description_proc = Description;
1101
+ plugin->extension_proc = Extension;
1102
+ plugin->regexpr_proc = RegExpr;
1103
+ plugin->open_proc = NULL;
1104
+ plugin->close_proc = NULL;
1105
+ plugin->pagecount_proc = NULL;
1106
+ plugin->pagecapability_proc = NULL;
1107
+ plugin->load_proc = Load;
1108
+ plugin->save_proc = Save;
1109
+ plugin->validate_proc = Validate;
1110
+ plugin->mime_proc = MimeType;
1111
+ plugin->supports_export_bpp_proc = SupportsExportDepth;
1112
+ plugin->supports_export_type_proc = SupportsExportType;
1113
+ plugin->supports_icc_profiles_proc = SupportsICCProfiles;
1114
+ plugin->supports_no_pixels_proc = SupportsNoPixels;
1115
+ }