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,1320 @@
1
+ // ==========================================================
2
+ // MNG / JNG helpers
3
+ //
4
+ // Design and implementation by
5
+ // - Herv� Drolon (drolon@infonie.fr)
6
+ //
7
+ // This file is part of FreeImage 3
8
+ //
9
+ // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
10
+ // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
11
+ // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
12
+ // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
13
+ // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
14
+ // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
15
+ // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
16
+ // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
17
+ // THIS DISCLAIMER.
18
+ //
19
+ // Use at your own risk!
20
+ // ==========================================================
21
+
22
+ #include "FreeImage.h"
23
+ #include "Utilities.h"
24
+
25
+ /**
26
+ References
27
+ http://www.libpng.org/pub/mng/spec/jng.html
28
+ http://www.w3.org/TR/PNG/
29
+ http://libpng.org/pub/mng/spec/
30
+ */
31
+
32
+ // --------------------------------------------------------------------------
33
+
34
+ #define MNG_INCLUDE_JNG
35
+
36
+ #ifdef MNG_INCLUDE_JNG
37
+ #define MNG_COLORTYPE_JPEGGRAY 8 /* JHDR */
38
+ #define MNG_COLORTYPE_JPEGCOLOR 10
39
+ #define MNG_COLORTYPE_JPEGGRAYA 12
40
+ #define MNG_COLORTYPE_JPEGCOLORA 14
41
+
42
+ #define MNG_BITDEPTH_JPEG8 8 /* JHDR */
43
+ #define MNG_BITDEPTH_JPEG12 12
44
+ #define MNG_BITDEPTH_JPEG8AND12 20
45
+
46
+ #define MNG_COMPRESSION_BASELINEJPEG 8 /* JHDR */
47
+
48
+ #define MNG_INTERLACE_SEQUENTIAL 0 /* JHDR */
49
+ #define MNG_INTERLACE_PROGRESSIVE 8
50
+ #endif /* MNG_INCLUDE_JNG */
51
+
52
+ // --------------------------------------------------------------------------
53
+
54
+ #define JNG_SUPPORTED
55
+
56
+ /** Size of a JDAT chunk on writing */
57
+ const DWORD JPEG_CHUNK_SIZE = 8192;
58
+
59
+ /** PNG signature */
60
+ static const BYTE g_png_signature[8] = { 137, 80, 78, 71, 13, 10, 26, 10 };
61
+ /** JNG signature */
62
+ static const BYTE g_jng_signature[8] = { 139, 74, 78, 71, 13, 10, 26, 10 };
63
+
64
+ // --------------------------------------------------------------------------
65
+
66
+ /** Chunk type converted to enum */
67
+ enum eChunckType {
68
+ UNKNOWN_CHUNCK,
69
+ MHDR,
70
+ BACK,
71
+ BASI,
72
+ CLIP,
73
+ CLON,
74
+ DEFI,
75
+ DHDR,
76
+ DISC,
77
+ ENDL,
78
+ FRAM,
79
+ IEND,
80
+ IHDR,
81
+ JHDR,
82
+ LOOP,
83
+ MAGN,
84
+ MEND,
85
+ MOVE,
86
+ PAST,
87
+ PLTE,
88
+ SAVE,
89
+ SEEK,
90
+ SHOW,
91
+ TERM,
92
+ bKGD,
93
+ cHRM,
94
+ gAMA,
95
+ iCCP,
96
+ nEED,
97
+ pHYg,
98
+ vpAg,
99
+ pHYs,
100
+ sBIT,
101
+ sRGB,
102
+ tRNS,
103
+ IDAT,
104
+ JDAT,
105
+ JDAA,
106
+ JdAA,
107
+ JSEP,
108
+ oFFs,
109
+ hIST,
110
+ iTXt,
111
+ sPLT,
112
+ sTER,
113
+ tEXt,
114
+ tIME,
115
+ zTXt
116
+ };
117
+
118
+ /**
119
+ Helper for map<key, value> where value is a pointer to a string.
120
+ Used to store tEXt metadata.
121
+ */
122
+ typedef std::map<std::string, std::string> tEXtMAP;
123
+
124
+ // --------------------------------------------------------------------------
125
+
126
+ /*
127
+ Constant strings for known chunk types. If you need to add a chunk,
128
+ add a string holding the name here. To make the code more
129
+ portable, we use ASCII numbers like this, not characters.
130
+ */
131
+
132
+ static BYTE mng_MHDR[5]={ 77, 72, 68, 82, (BYTE) '\0'};
133
+ static BYTE mng_BACK[5]={ 66, 65, 67, 75, (BYTE) '\0'};
134
+ static BYTE mng_BASI[5]={ 66, 65, 83, 73, (BYTE) '\0'};
135
+ static BYTE mng_CLIP[5]={ 67, 76, 73, 80, (BYTE) '\0'};
136
+ static BYTE mng_CLON[5]={ 67, 76, 79, 78, (BYTE) '\0'};
137
+ static BYTE mng_DEFI[5]={ 68, 69, 70, 73, (BYTE) '\0'};
138
+ static BYTE mng_DHDR[5]={ 68, 72, 68, 82, (BYTE) '\0'};
139
+ static BYTE mng_DISC[5]={ 68, 73, 83, 67, (BYTE) '\0'};
140
+ static BYTE mng_ENDL[5]={ 69, 78, 68, 76, (BYTE) '\0'};
141
+ static BYTE mng_FRAM[5]={ 70, 82, 65, 77, (BYTE) '\0'};
142
+ static BYTE mng_IEND[5]={ 73, 69, 78, 68, (BYTE) '\0'};
143
+ static BYTE mng_IHDR[5]={ 73, 72, 68, 82, (BYTE) '\0'};
144
+ static BYTE mng_JHDR[5]={ 74, 72, 68, 82, (BYTE) '\0'};
145
+ static BYTE mng_LOOP[5]={ 76, 79, 79, 80, (BYTE) '\0'};
146
+ static BYTE mng_MAGN[5]={ 77, 65, 71, 78, (BYTE) '\0'};
147
+ static BYTE mng_MEND[5]={ 77, 69, 78, 68, (BYTE) '\0'};
148
+ static BYTE mng_MOVE[5]={ 77, 79, 86, 69, (BYTE) '\0'};
149
+ static BYTE mng_PAST[5]={ 80, 65, 83, 84, (BYTE) '\0'};
150
+ static BYTE mng_PLTE[5]={ 80, 76, 84, 69, (BYTE) '\0'};
151
+ static BYTE mng_SAVE[5]={ 83, 65, 86, 69, (BYTE) '\0'};
152
+ static BYTE mng_SEEK[5]={ 83, 69, 69, 75, (BYTE) '\0'};
153
+ static BYTE mng_SHOW[5]={ 83, 72, 79, 87, (BYTE) '\0'};
154
+ static BYTE mng_TERM[5]={ 84, 69, 82, 77, (BYTE) '\0'};
155
+ static BYTE mng_bKGD[5]={ 98, 75, 71, 68, (BYTE) '\0'};
156
+ static BYTE mng_cHRM[5]={ 99, 72, 82, 77, (BYTE) '\0'};
157
+ static BYTE mng_gAMA[5]={103, 65, 77, 65, (BYTE) '\0'};
158
+ static BYTE mng_iCCP[5]={105, 67, 67, 80, (BYTE) '\0'};
159
+ static BYTE mng_nEED[5]={110, 69, 69, 68, (BYTE) '\0'};
160
+ static BYTE mng_pHYg[5]={112, 72, 89, 103, (BYTE) '\0'};
161
+ static BYTE mng_vpAg[5]={118, 112, 65, 103, (BYTE) '\0'};
162
+ static BYTE mng_pHYs[5]={112, 72, 89, 115, (BYTE) '\0'};
163
+ static BYTE mng_sBIT[5]={115, 66, 73, 84, (BYTE) '\0'};
164
+ static BYTE mng_sRGB[5]={115, 82, 71, 66, (BYTE) '\0'};
165
+ static BYTE mng_tRNS[5]={116, 82, 78, 83, (BYTE) '\0'};
166
+
167
+ #if defined(JNG_SUPPORTED)
168
+ static BYTE mng_IDAT[5]={ 73, 68, 65, 84, (BYTE) '\0'};
169
+ static BYTE mng_JDAT[5]={ 74, 68, 65, 84, (BYTE) '\0'};
170
+ static BYTE mng_JDAA[5]={ 74, 68, 65, 65, (BYTE) '\0'};
171
+ static BYTE mng_JdAA[5]={ 74, 100, 65, 65, (BYTE) '\0'};
172
+ static BYTE mng_JSEP[5]={ 74, 83, 69, 80, (BYTE) '\0'};
173
+ static BYTE mng_oFFs[5]={111, 70, 70, 115, (BYTE) '\0'};
174
+ #endif
175
+
176
+ static BYTE mng_hIST[5]={104, 73, 83, 84, (BYTE) '\0'};
177
+ static BYTE mng_iTXt[5]={105, 84, 88, 116, (BYTE) '\0'};
178
+ static BYTE mng_sPLT[5]={115, 80, 76, 84, (BYTE) '\0'};
179
+ static BYTE mng_sTER[5]={115, 84, 69, 82, (BYTE) '\0'};
180
+ static BYTE mng_tEXt[5]={116, 69, 88, 116, (BYTE) '\0'};
181
+ static BYTE mng_tIME[5]={116, 73, 77, 69, (BYTE) '\0'};
182
+ static BYTE mng_zTXt[5]={122, 84, 88, 116, (BYTE) '\0'};
183
+
184
+
185
+ // --------------------------------------------------------------------------
186
+
187
+ /**
188
+ Convert a chunk name to a unique ID
189
+ */
190
+ static eChunckType
191
+ mng_GetChunckType(const BYTE *mChunkName) {
192
+ if(memcmp(mChunkName, mng_MHDR, 4) == 0) {
193
+ return MHDR;
194
+ }
195
+ if(memcmp(mChunkName, mng_LOOP, 4) == 0) {
196
+ return LOOP;
197
+ }
198
+ if(memcmp(mChunkName, mng_DEFI, 4) == 0) {
199
+ return DEFI;
200
+ }
201
+ if(memcmp(mChunkName, mng_PLTE, 4) == 0) {
202
+ return PLTE;
203
+ }
204
+ if(memcmp(mChunkName, mng_tRNS, 4) == 0) {
205
+ return tRNS;
206
+ }
207
+ if(memcmp(mChunkName, mng_IHDR, 4) == 0) {
208
+ return IHDR;
209
+ }
210
+ if(memcmp(mChunkName, mng_JHDR, 4) == 0) {
211
+ return JHDR;
212
+ }
213
+ if(memcmp(mChunkName, mng_MEND, 4) == 0) {
214
+ return MEND;
215
+ }
216
+ if(memcmp(mChunkName, mng_IEND, 4) == 0) {
217
+ return IEND;
218
+ }
219
+ if(memcmp(mChunkName, mng_JDAT, 4) == 0) {
220
+ return JDAT;
221
+ }
222
+ if(memcmp(mChunkName, mng_IDAT, 4) == 0) {
223
+ return IDAT;
224
+ }
225
+ if(memcmp(mChunkName, mng_JDAA, 4) == 0) {
226
+ return JDAA;
227
+ }
228
+ if(memcmp(mChunkName, mng_gAMA, 4) == 0) {
229
+ return gAMA;
230
+ }
231
+ if(memcmp(mChunkName, mng_pHYs, 4) == 0) {
232
+ return pHYs;
233
+ }
234
+ if(memcmp(mChunkName, mng_bKGD, 4) == 0) {
235
+ return bKGD;
236
+ }
237
+ if(memcmp(mChunkName, mng_tEXt, 4) == 0) {
238
+ return tEXt;
239
+ }
240
+
241
+ return UNKNOWN_CHUNCK;
242
+ }
243
+
244
+ inline void
245
+ mng_SwapShort(WORD *sp) {
246
+ #ifndef FREEIMAGE_BIGENDIAN
247
+ SwapShort(sp);
248
+ #endif
249
+ }
250
+
251
+ inline void
252
+ mng_SwapLong(DWORD *lp) {
253
+ #ifndef FREEIMAGE_BIGENDIAN
254
+ SwapLong(lp);
255
+ #endif
256
+ }
257
+
258
+ /**
259
+ Returns the size, in bytes, of a FreeImageIO stream, from the current position.
260
+ */
261
+ static long
262
+ mng_LOF(FreeImageIO *io, fi_handle handle) {
263
+ long start_pos = io->tell_proc(handle);
264
+ io->seek_proc(handle, 0, SEEK_END);
265
+ long file_length = io->tell_proc(handle);
266
+ io->seek_proc(handle, start_pos, SEEK_SET);
267
+ return file_length;
268
+ }
269
+
270
+ /**
271
+ Count the number of bytes in a PNG stream, from IHDR to IEND.
272
+ If successful, the stream position, as given by io->tell_proc(handle),
273
+ should be the end of the PNG stream at the return of the function.
274
+ @param io
275
+ @param handle
276
+ @param inPos
277
+ @param m_TotalBytesOfChunks
278
+ @return Returns TRUE if successful, returns FALSE otherwise
279
+ */
280
+ static BOOL
281
+ mng_CountPNGChunks(FreeImageIO *io, fi_handle handle, long inPos, unsigned *m_TotalBytesOfChunks) {
282
+ long mLOF;
283
+ long mPos;
284
+ BOOL mEnd = FALSE;
285
+ DWORD mLength = 0;
286
+ BYTE mChunkName[5];
287
+
288
+ *m_TotalBytesOfChunks = 0;
289
+
290
+ // get the length of the file
291
+ mLOF = mng_LOF(io, handle);
292
+
293
+ // go to the start of the file
294
+ io->seek_proc(handle, inPos, SEEK_SET);
295
+
296
+ try {
297
+ // parse chunks
298
+ while(mEnd == FALSE) {
299
+ // chunk length
300
+ mPos = io->tell_proc(handle);
301
+ if(mPos + 4 > mLOF) {
302
+ throw(1);
303
+ }
304
+ io->read_proc(&mLength, 1, 4, handle);
305
+ mng_SwapLong(&mLength);
306
+ // chunk name
307
+ mPos = io->tell_proc(handle);
308
+ if(mPos + 4 > mLOF) {
309
+ throw(1);
310
+ }
311
+ io->read_proc(&mChunkName[0], 1, 4, handle);
312
+ mChunkName[4] = '\0';
313
+
314
+ // go to next chunk
315
+ mPos = io->tell_proc(handle);
316
+ // 4 = size of the CRC
317
+ if(mPos + (long)mLength + 4 > mLOF) {
318
+ throw(1);
319
+ }
320
+ io->seek_proc(handle, mLength + 4, SEEK_CUR);
321
+
322
+ switch( mng_GetChunckType(mChunkName) ) {
323
+ case IHDR:
324
+ if(mLength != 13) {
325
+ throw(1);
326
+ }
327
+ break;
328
+
329
+ case IEND:
330
+ mEnd = TRUE;
331
+ // the length below includes 4 bytes CRC, but no bytes for Length
332
+ *m_TotalBytesOfChunks = io->tell_proc(handle) - inPos;
333
+ break;
334
+
335
+ case UNKNOWN_CHUNCK:
336
+ default:
337
+ break;
338
+ }
339
+
340
+ } // while(!mEnd)
341
+
342
+ return TRUE;
343
+
344
+ } catch(int) {
345
+ return FALSE;
346
+ }
347
+ }
348
+
349
+ /**
350
+ Retrieve the position of a chunk in a PNG stream
351
+ @param hPngMemory PNG stream handle
352
+ @param chunk_name Name of the chunk to be found
353
+ @param offset Start of the search in the stream
354
+ @param start_pos [returned value] Start position of the chunk
355
+ @param next_pos [returned value] Start position of the next chunk
356
+ @return Returns TRUE if successful, returns FALSE otherwise
357
+ */
358
+ static BOOL
359
+ mng_FindChunk(FIMEMORY *hPngMemory, BYTE *chunk_name, long offset, DWORD *start_pos, DWORD *next_pos) {
360
+ DWORD mLength = 0;
361
+
362
+ BYTE *data = NULL;
363
+ DWORD size_in_bytes = 0;
364
+
365
+ *start_pos = 0;
366
+ *next_pos = 0;
367
+
368
+ // get a pointer to the stream buffer
369
+ FreeImage_AcquireMemory(hPngMemory, &data, &size_in_bytes);
370
+ if(!(data && size_in_bytes) || (size_in_bytes < 20) || (size_in_bytes - offset < 20)) {
371
+ // not enough space to read a signature(8 bytes) + a chunk(at least 12 bytes)
372
+ return FALSE;
373
+ }
374
+
375
+ try {
376
+
377
+ // skip the signature and/or any following chunk(s)
378
+ DWORD chunk_pos = offset;
379
+
380
+ while(1) {
381
+ // get chunk length
382
+ if(chunk_pos + 4 > size_in_bytes) {
383
+ break;
384
+ }
385
+
386
+ memcpy(&mLength, &data[chunk_pos], 4);
387
+ mng_SwapLong(&mLength);
388
+ chunk_pos += 4;
389
+
390
+ const DWORD next_chunk_pos = chunk_pos + 4 + mLength + 4;
391
+ if(next_chunk_pos > size_in_bytes) {
392
+ break;
393
+ }
394
+
395
+ // get chunk name
396
+ if(memcmp(&data[chunk_pos], chunk_name, 4) == 0) {
397
+ chunk_pos -= 4; // found chunk
398
+ *start_pos = chunk_pos;
399
+ *next_pos = next_chunk_pos;
400
+ return TRUE;
401
+ }
402
+
403
+ chunk_pos = next_chunk_pos;
404
+ }
405
+
406
+ return FALSE;
407
+
408
+ } catch(int) {
409
+ return FALSE;
410
+ }
411
+ }
412
+
413
+ /**
414
+ Remove a chunk located at (start_pos, next_pos) in the PNG stream
415
+ @param hPngMemory PNG stream handle
416
+ @param start_pos Start position of the chunk
417
+ @param next_pos Start position of the next chunk
418
+ @return Returns TRUE if successfull, returns FALSE otherwise
419
+ */
420
+ static BOOL
421
+ mng_CopyRemoveChunks(FIMEMORY *hPngMemory, DWORD start_pos, DWORD next_pos) {
422
+ BYTE *data = NULL;
423
+ DWORD size_in_bytes = 0;
424
+
425
+ // length of the chunk to remove
426
+ DWORD chunk_length = next_pos - start_pos;
427
+ if(chunk_length == 0) {
428
+ return TRUE;
429
+ }
430
+
431
+ // get a pointer to the stream buffer
432
+ FreeImage_AcquireMemory(hPngMemory, &data, &size_in_bytes);
433
+ if(!(data && size_in_bytes) || (size_in_bytes < 20) || (chunk_length >= size_in_bytes)) {
434
+ // not enough space to read a signature(8 bytes) + a chunk(at least 12 bytes)
435
+ return FALSE;
436
+ }
437
+
438
+ // new file length
439
+ unsigned buffer_size = size_in_bytes + chunk_length;
440
+
441
+ BYTE *buffer = (BYTE*)malloc(buffer_size * sizeof(BYTE));
442
+ if(!buffer) {
443
+ return FALSE;
444
+ }
445
+ memcpy(&buffer[0], &data[0], start_pos);
446
+ memcpy(&buffer[start_pos], &data[next_pos], size_in_bytes - next_pos);
447
+
448
+ // seek to the start of the stream
449
+ FreeImage_SeekMemory(hPngMemory, 0, SEEK_SET);
450
+ // re-write the stream
451
+ FreeImage_WriteMemory(buffer, 1, buffer_size, hPngMemory);
452
+
453
+ free(buffer);
454
+
455
+ return TRUE;
456
+ }
457
+
458
+ /**
459
+ Insert a chunk just before the inNextChunkName chunk
460
+ @param hPngMemory PNG stream handle
461
+ @param start_pos Start position of the inNextChunkName chunk
462
+ @param next_pos Start position of the next chunk
463
+ @return Returns TRUE if successfull, returns FALSE otherwise
464
+ */
465
+ static BOOL
466
+ mng_CopyInsertChunks(FIMEMORY *hPngMemory, BYTE *inNextChunkName, BYTE *inInsertChunk, DWORD inChunkLength, DWORD start_pos, DWORD next_pos) {
467
+ BYTE *data = NULL;
468
+ DWORD size_in_bytes = 0;
469
+
470
+ // length of the chunk to check
471
+ DWORD chunk_length = next_pos - start_pos;
472
+ if(chunk_length == 0) {
473
+ return TRUE;
474
+ }
475
+
476
+ // get a pointer to the stream buffer
477
+ FreeImage_AcquireMemory(hPngMemory, &data, &size_in_bytes);
478
+ if(!(data && size_in_bytes) || (size_in_bytes < 20) || (chunk_length >= size_in_bytes)) {
479
+ // not enough space to read a signature(8 bytes) + a chunk(at least 12 bytes)
480
+ return FALSE;
481
+ }
482
+
483
+ // new file length
484
+ unsigned buffer_size = inChunkLength + size_in_bytes;
485
+
486
+ BYTE *buffer = (BYTE*)malloc(buffer_size * sizeof(BYTE));
487
+ if(!buffer) {
488
+ return FALSE;
489
+ }
490
+ unsigned p = 0;
491
+ memcpy(&buffer[p], &data[0], start_pos);
492
+ p += start_pos;
493
+ memcpy(&buffer[p], inInsertChunk, inChunkLength);
494
+ p += inChunkLength;
495
+ memcpy(&buffer[p], &data[start_pos], size_in_bytes - start_pos);
496
+
497
+ // seek to the start of the stream
498
+ FreeImage_SeekMemory(hPngMemory, 0, SEEK_SET);
499
+ // re-write the stream
500
+ FreeImage_WriteMemory(buffer, 1, buffer_size, hPngMemory);
501
+
502
+ free(buffer);
503
+
504
+ return TRUE;
505
+ }
506
+
507
+ static BOOL
508
+ mng_RemoveChunk(FIMEMORY *hPngMemory, BYTE *chunk_name) {
509
+ BOOL bResult = FALSE;
510
+
511
+ DWORD start_pos = 0;
512
+ DWORD next_pos = 0;
513
+
514
+ bResult = mng_FindChunk(hPngMemory, chunk_name, 8, &start_pos, &next_pos);
515
+ if(!bResult) {
516
+ return FALSE;
517
+ }
518
+
519
+ bResult = mng_CopyRemoveChunks(hPngMemory, start_pos, next_pos);
520
+ if(!bResult) {
521
+ return FALSE;
522
+ }
523
+
524
+ return TRUE;
525
+ }
526
+
527
+ static BOOL
528
+ mng_InsertChunk(FIMEMORY *hPngMemory, BYTE *inNextChunkName, BYTE *inInsertChunk, unsigned chunk_length) {
529
+ BOOL bResult = FALSE;
530
+
531
+ DWORD start_pos = 0;
532
+ DWORD next_pos = 0;
533
+
534
+ bResult = mng_FindChunk(hPngMemory, inNextChunkName, 8, &start_pos, &next_pos);
535
+ if(!bResult) {
536
+ return FALSE;
537
+ }
538
+
539
+ bResult = mng_CopyInsertChunks(hPngMemory, inNextChunkName, inInsertChunk, chunk_length, start_pos, next_pos);
540
+ if(!bResult) {
541
+ return FALSE;
542
+ }
543
+
544
+ return TRUE;
545
+ }
546
+
547
+ static FIBITMAP*
548
+ mng_LoadFromMemoryHandle(FIMEMORY *hmem, int flags = 0) {
549
+ long offset = 0;
550
+ FIBITMAP *dib = NULL;
551
+
552
+ if(hmem) {
553
+ // seek to the start of the stream
554
+ FreeImage_SeekMemory(hmem, offset, SEEK_SET);
555
+
556
+ // check the file signature and deduce its format
557
+ // (the second argument is currently not used by FreeImage)
558
+ FREE_IMAGE_FORMAT fif = FreeImage_GetFileTypeFromMemory(hmem, 0);
559
+ if(fif != FIF_UNKNOWN) {
560
+ dib = FreeImage_LoadFromMemory(fif, hmem, flags);
561
+ }
562
+ }
563
+
564
+ return dib;
565
+ }
566
+
567
+ /**
568
+ Write a chunk in a PNG stream from the current position.
569
+ @param chunk_name Name of the chunk
570
+ @param chunk_data Chunk array
571
+ @param length Chunk length
572
+ @param hPngMemory PNG stream handle
573
+ */
574
+ static void
575
+ mng_WriteChunk(BYTE *chunk_name, BYTE *chunk_data, DWORD length, FIMEMORY *hPngMemory) {
576
+ DWORD crc_file = 0;
577
+ // write a PNG chunk ...
578
+ // - length
579
+ mng_SwapLong(&length);
580
+ FreeImage_WriteMemory(&length, 1, 4, hPngMemory);
581
+ mng_SwapLong(&length);
582
+ // - chunk name
583
+ FreeImage_WriteMemory(chunk_name, 1, 4, hPngMemory);
584
+ if(chunk_data && length) {
585
+ // - chunk data
586
+ FreeImage_WriteMemory(chunk_data, 1, length, hPngMemory);
587
+ // - crc
588
+ crc_file = FreeImage_ZLibCRC32(0, chunk_name, 4);
589
+ crc_file = FreeImage_ZLibCRC32(crc_file, chunk_data, length);
590
+ mng_SwapLong(&crc_file);
591
+ FreeImage_WriteMemory(&crc_file, 1, 4, hPngMemory);
592
+ } else {
593
+ // - crc
594
+ crc_file = FreeImage_ZLibCRC32(0, chunk_name, 4);
595
+ mng_SwapLong(&crc_file);
596
+ FreeImage_WriteMemory(&crc_file, 1, 4, hPngMemory);
597
+ }
598
+
599
+ }
600
+
601
+ /**
602
+ Wrap a IDAT chunk as a PNG stream.
603
+ The stream has the structure { g_png_signature, IHDR, IDAT, IEND }
604
+ The image is assumed to be a greyscale image.
605
+
606
+ @param jng_width Image width
607
+ @param jng_height Image height
608
+ @param jng_alpha_sample_depth Bits per pixel
609
+ @param mChunk PNG grayscale IDAT format
610
+ @param mLength IDAT chunk length
611
+ @param hPngMemory Output memory stream
612
+ */
613
+ static void
614
+ mng_WritePNGStream(DWORD jng_width, DWORD jng_height, BYTE jng_alpha_sample_depth, BYTE *mChunk, DWORD mLength, FIMEMORY *hPngMemory) {
615
+ // PNG grayscale IDAT format
616
+
617
+ BYTE data[14];
618
+
619
+ // wrap the IDAT chunk as a PNG stream
620
+
621
+ // write PNG file signature
622
+ FreeImage_WriteMemory(g_png_signature, 1, 8, hPngMemory);
623
+
624
+ // write a IHDR chunk ...
625
+ /*
626
+ The IHDR chunk must appear FIRST. It contains:
627
+ Width: 4 bytes
628
+ Height: 4 bytes
629
+ Bit depth: 1 byte
630
+ Color type: 1 byte
631
+ Compression method: 1 byte
632
+ Filter method: 1 byte
633
+ Interlace method: 1 byte
634
+ */
635
+ // - chunk data
636
+ mng_SwapLong(&jng_width);
637
+ mng_SwapLong(&jng_height);
638
+ memcpy(&data[0], &jng_width, 4);
639
+ memcpy(&data[4], &jng_height, 4);
640
+ mng_SwapLong(&jng_width);
641
+ mng_SwapLong(&jng_height);
642
+ data[8] = jng_alpha_sample_depth;
643
+ data[9] = 0; // color_type gray (jng_color_type)
644
+ data[10] = 0; // compression method 0 (jng_alpha_compression_method)
645
+ data[11] = 0; // filter_method 0 (jng_alpha_filter_method)
646
+ data[12] = 0; // interlace_method 0 (jng_alpha_interlace_method)
647
+
648
+ mng_WriteChunk(mng_IHDR, &data[0], 13, hPngMemory);
649
+
650
+ // write a IDAT chunk ...
651
+ mng_WriteChunk(mng_IDAT, mChunk, mLength, hPngMemory);
652
+
653
+ // write a IEND chunk ...
654
+ mng_WriteChunk(mng_IEND, NULL, 0, hPngMemory);
655
+
656
+ }
657
+
658
+ // --------------------------------------------------------------------------
659
+
660
+ /**
661
+ Build and set a FITAG whose type is FIDT_ASCII.
662
+ The tag must be destroyed by the caller using FreeImage_DeleteTag.
663
+ @param model Metadata model to be filled
664
+ @param dib Image to be filled
665
+ @param key Tag key
666
+ @param value Tag value
667
+ @return Returns TRUE if successful, returns FALSE otherwise
668
+ */
669
+ static BOOL
670
+ mng_SetKeyValue(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, const char *value) {
671
+ if(!dib || !key || !value) {
672
+ return FALSE;
673
+ }
674
+ // create a tag
675
+ FITAG *tag = FreeImage_CreateTag();
676
+ if(tag) {
677
+ BOOL bSuccess = TRUE;
678
+ // fill the tag
679
+ DWORD tag_length = (DWORD)(strlen(value) + 1);
680
+ bSuccess &= FreeImage_SetTagKey(tag, key);
681
+ bSuccess &= FreeImage_SetTagLength(tag, tag_length);
682
+ bSuccess &= FreeImage_SetTagCount(tag, tag_length);
683
+ bSuccess &= FreeImage_SetTagType(tag, FIDT_ASCII);
684
+ bSuccess &= FreeImage_SetTagValue(tag, value);
685
+ if(bSuccess) {
686
+ // set the tag
687
+ FreeImage_SetMetadata(model, dib, FreeImage_GetTagKey(tag), tag);
688
+ }
689
+ FreeImage_DeleteTag(tag);
690
+ return bSuccess;
691
+ }
692
+
693
+ return FALSE;
694
+ }
695
+
696
+ /**
697
+ Read a tEXt chunk and extract the key/value pair.
698
+ @param key_value_pair [returned value] Array of key/value pairs
699
+ @param mChunk Chunk data
700
+ @param mLength Chunk length
701
+ @return Returns TRUE if successful, returns FALSE otherwise
702
+ */
703
+ static BOOL
704
+ mng_SetMetadata_tEXt(tEXtMAP &key_value_pair, const BYTE *mChunk, DWORD mLength) {
705
+ std::string key;
706
+ std::string value;
707
+ BYTE *buffer = (BYTE*)malloc(mLength * sizeof(BYTE));
708
+ if(!buffer) {
709
+ return FALSE;
710
+ }
711
+ DWORD pos = 0;
712
+
713
+ memset(buffer, 0, mLength * sizeof(BYTE));
714
+
715
+ for(DWORD i = 0; i < mLength; i++) {
716
+ buffer[pos++] = mChunk[i];
717
+ if(mChunk[i] == '\0') {
718
+ if(key.size() == 0) {
719
+ key = (char*)buffer;
720
+ pos = 0;
721
+ memset(buffer, 0, mLength * sizeof(BYTE));
722
+ } else {
723
+ break;
724
+ }
725
+ }
726
+ }
727
+ value = (char*)buffer;
728
+ free(buffer);
729
+
730
+ key_value_pair[key] = value;
731
+
732
+ return TRUE;
733
+ }
734
+
735
+ // --------------------------------------------------------------------------
736
+
737
+ /**
738
+ Load a FIBITMAP from a MNG or a JNG stream
739
+ @param format_id ID of the caller
740
+ @param io Stream i/o functions
741
+ @param handle Stream handle
742
+ @param Offset Start of the first chunk
743
+ @param flags Loading flags
744
+ @return Returns a dib if successful, returns NULL otherwise
745
+ */
746
+ FIBITMAP*
747
+ mng_ReadChunks(int format_id, FreeImageIO *io, fi_handle handle, long Offset, int flags = 0) {
748
+ DWORD mLength = 0;
749
+ BYTE mChunkName[5];
750
+ BYTE *mChunk = NULL;
751
+ DWORD crc_file;
752
+ long LastOffset;
753
+ long mOrigPos;
754
+ BYTE *PLTE_file_chunk = NULL; // whole PLTE chunk (lentgh, name, array, crc)
755
+ DWORD PLTE_file_size = 0; // size of PLTE chunk
756
+
757
+ BOOL m_HasGlobalPalette = FALSE; // may turn to TRUE in PLTE chunk
758
+ unsigned m_TotalBytesOfChunks = 0;
759
+ FIBITMAP *dib = NULL;
760
+ FIBITMAP *dib_alpha = NULL;
761
+
762
+ FIMEMORY *hJpegMemory = NULL;
763
+ FIMEMORY *hPngMemory = NULL;
764
+ FIMEMORY *hIDATMemory = NULL;
765
+
766
+ // ---
767
+ DWORD jng_width = 0;
768
+ DWORD jng_height = 0;
769
+ BYTE jng_color_type = 0;
770
+ BYTE jng_image_sample_depth = 0;
771
+ BYTE jng_image_compression_method = 0;
772
+
773
+ BYTE jng_alpha_sample_depth = 0;
774
+ BYTE jng_alpha_compression_method = 0;
775
+ BYTE jng_alpha_filter_method = 0;
776
+ BYTE jng_alpha_interlace_method = 0;
777
+
778
+ DWORD mng_frame_width = 0;
779
+ DWORD mng_frame_height = 0;
780
+ DWORD mng_ticks_per_second = 0;
781
+ DWORD mng_nominal_layer_count = 0;
782
+ DWORD mng_nominal_frame_count = 0;
783
+ DWORD mng_nominal_play_time = 0;
784
+ DWORD mng_simplicity_profile = 0;
785
+
786
+
787
+ DWORD res_x = 2835; // 72 dpi
788
+ DWORD res_y = 2835; // 72 dpi
789
+ RGBQUAD rgbBkColor = {0, 0, 0, 0};
790
+ WORD bk_red, bk_green, bk_blue;
791
+ BOOL hasBkColor = FALSE;
792
+ BOOL mHasIDAT = FALSE;
793
+
794
+ tEXtMAP key_value_pair;
795
+
796
+ // ---
797
+
798
+ BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS;
799
+
800
+ // get the file size
801
+ const long mLOF = mng_LOF(io, handle);
802
+ // go to the first chunk
803
+ io->seek_proc(handle, Offset, SEEK_SET);
804
+
805
+ try {
806
+ BOOL mEnd = FALSE;
807
+
808
+ while(mEnd == FALSE) {
809
+ // start of the chunk
810
+ LastOffset = io->tell_proc(handle);
811
+ // read length
812
+ mLength = 0;
813
+ io->read_proc(&mLength, 1, sizeof(mLength), handle);
814
+ mng_SwapLong(&mLength);
815
+ // read name
816
+ io->read_proc(&mChunkName[0], 1, 4, handle);
817
+ mChunkName[4] = '\0';
818
+
819
+ if(mLength > 0) {
820
+ mChunk = (BYTE*)realloc(mChunk, mLength);
821
+ if(!mChunk) {
822
+ FreeImage_OutputMessageProc(format_id, "Error while parsing %s chunk: out of memory", mChunkName);
823
+ throw (const char*)NULL;
824
+ }
825
+ Offset = io->tell_proc(handle);
826
+ if(Offset + (long)mLength > mLOF) {
827
+ FreeImage_OutputMessageProc(format_id, "Error while parsing %s chunk: unexpected end of file", mChunkName);
828
+ throw (const char*)NULL;
829
+ }
830
+ // read chunk
831
+ io->read_proc(mChunk, 1, mLength, handle);
832
+ }
833
+ // read crc
834
+ io->read_proc(&crc_file, 1, sizeof(crc_file), handle);
835
+ mng_SwapLong(&crc_file);
836
+ // check crc
837
+ DWORD crc_check = FreeImage_ZLibCRC32(0, &mChunkName[0], 4);
838
+ crc_check = FreeImage_ZLibCRC32(crc_check, mChunk, mLength);
839
+ if(crc_check != crc_file) {
840
+ FreeImage_OutputMessageProc(format_id, "Error while parsing %s chunk: bad CRC", mChunkName);
841
+ throw (const char*)NULL;
842
+ }
843
+
844
+ switch( mng_GetChunckType(mChunkName) ) {
845
+ case MHDR:
846
+ // The MHDR chunk is always first in all MNG datastreams except for those
847
+ // that consist of a single PNG or JNG datastream with a PNG or JNG signature.
848
+ if(mLength == 28) {
849
+ memcpy(&mng_frame_width, &mChunk[0], 4);
850
+ memcpy(&mng_frame_height, &mChunk[4], 4);
851
+ memcpy(&mng_ticks_per_second, &mChunk[8], 4);
852
+ memcpy(&mng_nominal_layer_count, &mChunk[12], 4);
853
+ memcpy(&mng_nominal_frame_count, &mChunk[16], 4);
854
+ memcpy(&mng_nominal_play_time, &mChunk[20], 4);
855
+ memcpy(&mng_simplicity_profile, &mChunk[24], 4);
856
+
857
+ mng_SwapLong(&mng_frame_width);
858
+ mng_SwapLong(&mng_frame_height);
859
+ mng_SwapLong(&mng_ticks_per_second);
860
+ mng_SwapLong(&mng_nominal_layer_count);
861
+ mng_SwapLong(&mng_nominal_frame_count);
862
+ mng_SwapLong(&mng_nominal_play_time);
863
+ mng_SwapLong(&mng_simplicity_profile);
864
+
865
+ } else {
866
+ FreeImage_OutputMessageProc(format_id, "Error while parsing %s chunk: size is %d instead of 28", mChunkName, mLength);
867
+ }
868
+ break;
869
+
870
+ case MEND:
871
+ mEnd = TRUE;
872
+ break;
873
+
874
+ case LOOP:
875
+ case ENDL:
876
+ break;
877
+ case DEFI:
878
+ break;
879
+ case SAVE:
880
+ case SEEK:
881
+ case TERM:
882
+ break;
883
+ case BACK:
884
+ break;
885
+
886
+ // Global "PLTE" and "tRNS" (if any). PNG "PLTE" will be of 0 byte, as it uses global data.
887
+ case PLTE: // Global
888
+ m_HasGlobalPalette = TRUE;
889
+ PLTE_file_size = mLength + 12; // (lentgh, name, array, crc) = (4, 4, mLength, 4)
890
+ PLTE_file_chunk = (BYTE*)realloc(PLTE_file_chunk, PLTE_file_size);
891
+ if(!PLTE_file_chunk) {
892
+ FreeImage_OutputMessageProc(format_id, "Error while parsing %s chunk: out of memory", mChunkName);
893
+ throw (const char*)NULL;
894
+ } else {
895
+ mOrigPos = io->tell_proc(handle);
896
+ // seek to the start of the chunk
897
+ io->seek_proc(handle, LastOffset, SEEK_SET);
898
+ // load the whole chunk
899
+ io->read_proc(PLTE_file_chunk, 1, PLTE_file_size, handle);
900
+ // go to the start of the next chunk
901
+ io->seek_proc(handle, mOrigPos, SEEK_SET);
902
+ }
903
+ break;
904
+
905
+ case tRNS: // Global
906
+ break;
907
+
908
+ case IHDR:
909
+ Offset = LastOffset;
910
+ // parse the PNG file and get its file size
911
+ if(mng_CountPNGChunks(io, handle, Offset, &m_TotalBytesOfChunks) == FALSE) {
912
+ // reach an unexpected end of file
913
+ mEnd = TRUE;
914
+ FreeImage_OutputMessageProc(format_id, "Error while parsing %s chunk: unexpected end of PNG file", mChunkName);
915
+ break;
916
+ }
917
+
918
+ // wrap the { IHDR, ..., IEND } chunks as a PNG stream
919
+ if(hPngMemory == NULL) {
920
+ hPngMemory = FreeImage_OpenMemory();
921
+ }
922
+
923
+ mOrigPos = io->tell_proc(handle);
924
+
925
+ // write PNG file signature
926
+ FreeImage_SeekMemory(hPngMemory, 0, SEEK_SET);
927
+ FreeImage_WriteMemory(g_png_signature, 1, 8, hPngMemory);
928
+
929
+ mChunk = (BYTE*)realloc(mChunk, m_TotalBytesOfChunks);
930
+ if(!mChunk) {
931
+ FreeImage_OutputMessageProc(format_id, "Error while parsing %s chunk: out of memory", mChunkName);
932
+ throw (const char*)NULL;
933
+ }
934
+
935
+ // on calling CountPNGChunks earlier, we were in Offset pos,
936
+ // go back there
937
+ io->seek_proc(handle, Offset, SEEK_SET);
938
+ io->read_proc(mChunk, 1, m_TotalBytesOfChunks, handle);
939
+ // Put back to original pos
940
+ io->seek_proc(handle, mOrigPos, SEEK_SET);
941
+ // write the PNG chunks
942
+ FreeImage_WriteMemory(mChunk, 1, m_TotalBytesOfChunks, hPngMemory);
943
+
944
+ // plug in global PLTE if local PLTE exists
945
+ if(m_HasGlobalPalette) {
946
+ // ensure we remove some local chunks, so that global
947
+ // "PLTE" can be inserted right before "IDAT".
948
+ mng_RemoveChunk(hPngMemory, mng_PLTE);
949
+ mng_RemoveChunk(hPngMemory, mng_tRNS);
950
+ mng_RemoveChunk(hPngMemory, mng_bKGD);
951
+ // insert global "PLTE" chunk in its entirety before "IDAT"
952
+ mng_InsertChunk(hPngMemory, mng_IDAT, PLTE_file_chunk, PLTE_file_size);
953
+ }
954
+
955
+ if(dib) FreeImage_Unload(dib);
956
+ dib = mng_LoadFromMemoryHandle(hPngMemory, flags);
957
+
958
+ // stop after the first image
959
+ mEnd = TRUE;
960
+ break;
961
+
962
+ case JHDR:
963
+ if(mLength == 16) {
964
+ memcpy(&jng_width, &mChunk[0], 4);
965
+ memcpy(&jng_height, &mChunk[4], 4);
966
+ mng_SwapLong(&jng_width);
967
+ mng_SwapLong(&jng_height);
968
+
969
+ jng_color_type = mChunk[8];
970
+ jng_image_sample_depth = mChunk[9];
971
+ jng_image_compression_method = mChunk[10];
972
+ //BYTE jng_image_interlace_method = mChunk[11]; // for debug only
973
+
974
+ jng_alpha_sample_depth = mChunk[12];
975
+ jng_alpha_compression_method = mChunk[13];
976
+ jng_alpha_filter_method = mChunk[14];
977
+ jng_alpha_interlace_method = mChunk[15];
978
+ } else {
979
+ FreeImage_OutputMessageProc(format_id, "Error while parsing %s chunk: invalid chunk length", mChunkName);
980
+ throw (const char*)NULL;
981
+ }
982
+ break;
983
+
984
+ case JDAT:
985
+ if(hJpegMemory == NULL) {
986
+ hJpegMemory = FreeImage_OpenMemory();
987
+ }
988
+ // as there may be several JDAT chunks, concatenate them
989
+ FreeImage_WriteMemory(mChunk, 1, mLength, hJpegMemory);
990
+ break;
991
+
992
+ case IDAT:
993
+ if(!header_only && (jng_alpha_compression_method == 0)) {
994
+ // PNG grayscale IDAT format
995
+ if(hIDATMemory == NULL) {
996
+ hIDATMemory = FreeImage_OpenMemory();
997
+ mHasIDAT = TRUE;
998
+ }
999
+ // as there may be several IDAT chunks, concatenate them
1000
+ FreeImage_WriteMemory(mChunk, 1, mLength, hIDATMemory);
1001
+ }
1002
+ break;
1003
+
1004
+ case IEND:
1005
+ if(!hJpegMemory) {
1006
+ mEnd = TRUE;
1007
+ break;
1008
+ }
1009
+ // load the JPEG
1010
+ if(dib) {
1011
+ FreeImage_Unload(dib);
1012
+ }
1013
+ dib = mng_LoadFromMemoryHandle(hJpegMemory, flags);
1014
+
1015
+ // load the PNG alpha layer
1016
+ if(mHasIDAT) {
1017
+ BYTE *data = NULL;
1018
+ DWORD size_in_bytes = 0;
1019
+
1020
+ // get a pointer to the IDAT buffer
1021
+ FreeImage_AcquireMemory(hIDATMemory, &data, &size_in_bytes);
1022
+ if(data && size_in_bytes) {
1023
+ // wrap the IDAT chunk as a PNG stream
1024
+ if(hPngMemory == NULL) {
1025
+ hPngMemory = FreeImage_OpenMemory();
1026
+ }
1027
+ mng_WritePNGStream(jng_width, jng_height, jng_alpha_sample_depth, data, size_in_bytes, hPngMemory);
1028
+ // load the PNG
1029
+ if(dib_alpha) {
1030
+ FreeImage_Unload(dib_alpha);
1031
+ }
1032
+ dib_alpha = mng_LoadFromMemoryHandle(hPngMemory, flags);
1033
+ }
1034
+ }
1035
+ // stop the parsing
1036
+ mEnd = TRUE;
1037
+ break;
1038
+
1039
+ case JDAA:
1040
+ break;
1041
+
1042
+ case gAMA:
1043
+ break;
1044
+
1045
+ case pHYs:
1046
+ // unit is pixels per meter
1047
+ memcpy(&res_x, &mChunk[0], 4);
1048
+ mng_SwapLong(&res_x);
1049
+ memcpy(&res_y, &mChunk[4], 4);
1050
+ mng_SwapLong(&res_y);
1051
+ break;
1052
+
1053
+ case bKGD:
1054
+ memcpy(&bk_red, &mChunk[0], 2);
1055
+ mng_SwapShort(&bk_red);
1056
+ rgbBkColor.rgbRed = (BYTE)bk_red;
1057
+ memcpy(&bk_green, &mChunk[2], 2);
1058
+ mng_SwapShort(&bk_green);
1059
+ rgbBkColor.rgbGreen = (BYTE)bk_green;
1060
+ memcpy(&bk_blue, &mChunk[4], 2);
1061
+ mng_SwapShort(&bk_blue);
1062
+ rgbBkColor.rgbBlue = (BYTE)bk_blue;
1063
+ hasBkColor = TRUE;
1064
+ break;
1065
+
1066
+ case tEXt:
1067
+ mng_SetMetadata_tEXt(key_value_pair, mChunk, mLength);
1068
+ break;
1069
+
1070
+ case UNKNOWN_CHUNCK:
1071
+ default:
1072
+ break;
1073
+
1074
+
1075
+ } // switch( GetChunckType )
1076
+ } // while(!mEnd)
1077
+
1078
+ FreeImage_CloseMemory(hJpegMemory);
1079
+ FreeImage_CloseMemory(hPngMemory);
1080
+ FreeImage_CloseMemory(hIDATMemory);
1081
+ free(mChunk);
1082
+ free(PLTE_file_chunk);
1083
+
1084
+ // convert to 32-bit if a transparent layer is available
1085
+ if(!header_only && dib_alpha) {
1086
+ FIBITMAP *dst = FreeImage_ConvertTo32Bits(dib);
1087
+ if((FreeImage_GetBPP(dib_alpha) == 8) && (FreeImage_GetImageType(dib_alpha) == FIT_BITMAP)) {
1088
+ FreeImage_SetChannel(dst, dib_alpha, FICC_ALPHA);
1089
+ } else {
1090
+ FIBITMAP *dst_alpha = FreeImage_ConvertTo8Bits(dib_alpha);
1091
+ FreeImage_SetChannel(dst, dst_alpha, FICC_ALPHA);
1092
+ FreeImage_Unload(dst_alpha);
1093
+ }
1094
+ FreeImage_Unload(dib);
1095
+ dib = dst;
1096
+ }
1097
+ FreeImage_Unload(dib_alpha);
1098
+
1099
+ if(dib) {
1100
+ // set metadata
1101
+ FreeImage_SetDotsPerMeterX(dib, res_x);
1102
+ FreeImage_SetDotsPerMeterY(dib, res_y);
1103
+ if(hasBkColor) {
1104
+ FreeImage_SetBackgroundColor(dib, &rgbBkColor);
1105
+ }
1106
+ if(key_value_pair.size()) {
1107
+ for(tEXtMAP::iterator j = key_value_pair.begin(); j != key_value_pair.end(); j++) {
1108
+ std::string key = (*j).first;
1109
+ std::string value = (*j).second;
1110
+ mng_SetKeyValue(FIMD_COMMENTS, dib, key.c_str(), value.c_str());
1111
+ }
1112
+ }
1113
+ }
1114
+
1115
+ return dib;
1116
+
1117
+ } catch(const char *text) {
1118
+ FreeImage_CloseMemory(hJpegMemory);
1119
+ FreeImage_CloseMemory(hPngMemory);
1120
+ FreeImage_CloseMemory(hIDATMemory);
1121
+ free(mChunk);
1122
+ free(PLTE_file_chunk);
1123
+ FreeImage_Unload(dib);
1124
+ FreeImage_Unload(dib_alpha);
1125
+ if(text) {
1126
+ FreeImage_OutputMessageProc(format_id, text);
1127
+ }
1128
+ return NULL;
1129
+ }
1130
+ }
1131
+
1132
+ // --------------------------------------------------------------------------
1133
+
1134
+ /**
1135
+ Write a FIBITMAP to a JNG stream
1136
+ @param format_id ID of the caller
1137
+ @param io Stream i/o functions
1138
+ @param dib Image to be saved
1139
+ @param handle Stream handle
1140
+ @param flags Saving flags
1141
+ @return Returns TRUE if successful, returns FALSE otherwise
1142
+ */
1143
+ BOOL
1144
+ mng_WriteJNG(int format_id, FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int flags) {
1145
+ DWORD jng_width = 0;
1146
+ DWORD jng_height = 0;
1147
+ BYTE jng_color_type = 0;
1148
+ BYTE jng_image_sample_depth = 8;
1149
+ BYTE jng_image_compression_method = 8; // 8: ISO-10918-1 Huffman-coded baseline JPEG.
1150
+ BYTE jng_image_interlace_method = 0;
1151
+
1152
+ BYTE jng_alpha_sample_depth = 0;
1153
+ BYTE jng_alpha_compression_method = 0;
1154
+ BYTE jng_alpha_filter_method = 0;
1155
+ BYTE jng_alpha_interlace_method = 0;
1156
+
1157
+ BYTE buffer[16];
1158
+
1159
+ FIMEMORY *hJngMemory = NULL;
1160
+ FIMEMORY *hJpegMemory = NULL;
1161
+ FIMEMORY *hPngMemory = NULL;
1162
+
1163
+ FIBITMAP *dib_rgb = NULL;
1164
+ FIBITMAP *dib_alpha = NULL;
1165
+
1166
+ if(!dib || (FreeImage_GetImageType(dib) != FIT_BITMAP)) {
1167
+ return FALSE;
1168
+ }
1169
+
1170
+ unsigned bpp = FreeImage_GetBPP(dib);
1171
+
1172
+ switch(bpp) {
1173
+ case 8:
1174
+ if(FreeImage_GetColorType(dib) == FIC_MINISBLACK) {
1175
+ dib_rgb = dib;
1176
+ jng_color_type = MNG_COLORTYPE_JPEGGRAY;
1177
+ } else {
1178
+ // JPEG plugin will convert other types (FIC_MINISWHITE, FIC_PALETTE) to 24-bit on the fly
1179
+ //dib_rgb = FreeImage_ConvertTo24Bits(dib);
1180
+ dib_rgb = dib;
1181
+ jng_color_type = MNG_COLORTYPE_JPEGCOLOR;
1182
+
1183
+ }
1184
+ break;
1185
+ case 24:
1186
+ dib_rgb = dib;
1187
+ jng_color_type = MNG_COLORTYPE_JPEGCOLOR;
1188
+ break;
1189
+ case 32:
1190
+ dib_rgb = FreeImage_ConvertTo24Bits(dib);
1191
+ jng_color_type = MNG_COLORTYPE_JPEGCOLORA;
1192
+ jng_alpha_sample_depth = 8;
1193
+ break;
1194
+ default:
1195
+ return FALSE;
1196
+ }
1197
+
1198
+ jng_width = (DWORD)FreeImage_GetWidth(dib);
1199
+ jng_height = (DWORD)FreeImage_GetHeight(dib);
1200
+
1201
+ try {
1202
+ hJngMemory = FreeImage_OpenMemory();
1203
+
1204
+ // --- write JNG file signature ---
1205
+ FreeImage_WriteMemory(g_jng_signature, 1, 8, hJngMemory);
1206
+
1207
+ // --- write a JHDR chunk ---
1208
+ SwapLong(&jng_width);
1209
+ SwapLong(&jng_height);
1210
+ memcpy(&buffer[0], &jng_width, 4);
1211
+ memcpy(&buffer[4], &jng_height, 4);
1212
+ SwapLong(&jng_width);
1213
+ SwapLong(&jng_height);
1214
+ buffer[8] = jng_color_type;
1215
+ buffer[9] = jng_image_sample_depth;
1216
+ buffer[10] = jng_image_compression_method;
1217
+ buffer[11] = jng_image_interlace_method;
1218
+ buffer[12] = jng_alpha_sample_depth;
1219
+ buffer[13] = jng_alpha_compression_method;
1220
+ buffer[14] = jng_alpha_filter_method;
1221
+ buffer[15] = jng_alpha_interlace_method;
1222
+ mng_WriteChunk(mng_JHDR, &buffer[0], 16, hJngMemory);
1223
+
1224
+ // --- write a sequence of JDAT chunks ---
1225
+ hJpegMemory = FreeImage_OpenMemory();
1226
+ flags |= JPEG_BASELINE;
1227
+ if(!FreeImage_SaveToMemory(FIF_JPEG, dib_rgb, hJpegMemory, flags)) {
1228
+ throw (const char*)NULL;
1229
+ }
1230
+ if(dib_rgb != dib) {
1231
+ FreeImage_Unload(dib_rgb);
1232
+ dib_rgb = NULL;
1233
+ }
1234
+ {
1235
+ BYTE *jpeg_data = NULL;
1236
+ DWORD size_in_bytes = 0;
1237
+
1238
+ // get a pointer to the stream buffer
1239
+ FreeImage_AcquireMemory(hJpegMemory, &jpeg_data, &size_in_bytes);
1240
+ // write chunks
1241
+ for(DWORD k = 0; k < size_in_bytes;) {
1242
+ DWORD bytes_left = size_in_bytes - k;
1243
+ DWORD chunk_size = MIN(JPEG_CHUNK_SIZE, bytes_left);
1244
+ mng_WriteChunk(mng_JDAT, &jpeg_data[k], chunk_size, hJngMemory);
1245
+ k += chunk_size;
1246
+ }
1247
+ }
1248
+ FreeImage_CloseMemory(hJpegMemory);
1249
+ hJpegMemory = NULL;
1250
+
1251
+ // --- write alpha layer as a sequence of IDAT chunk ---
1252
+ if((bpp == 32) && (jng_color_type == MNG_COLORTYPE_JPEGCOLORA)) {
1253
+ dib_alpha = FreeImage_GetChannel(dib, FICC_ALPHA);
1254
+
1255
+ hPngMemory = FreeImage_OpenMemory();
1256
+ if(!FreeImage_SaveToMemory(FIF_PNG, dib_alpha, hPngMemory, PNG_DEFAULT)) {
1257
+ throw (const char*)NULL;
1258
+ }
1259
+ FreeImage_Unload(dib_alpha);
1260
+ dib_alpha = NULL;
1261
+ // get the IDAT chunk
1262
+ {
1263
+ BOOL bResult = FALSE;
1264
+ DWORD start_pos = 0;
1265
+ DWORD next_pos = 0;
1266
+ long offset = 8;
1267
+
1268
+ do {
1269
+ // find the next IDAT chunk from 'offset' position
1270
+ bResult = mng_FindChunk(hPngMemory, mng_IDAT, offset, &start_pos, &next_pos);
1271
+ if(!bResult) break;
1272
+
1273
+ BYTE *png_data = NULL;
1274
+ DWORD size_in_bytes = 0;
1275
+
1276
+ // get a pointer to the stream buffer
1277
+ FreeImage_AcquireMemory(hPngMemory, &png_data, &size_in_bytes);
1278
+ // write the IDAT chunk
1279
+ mng_WriteChunk(mng_IDAT, &png_data[start_pos+8], next_pos - start_pos - 12, hJngMemory);
1280
+
1281
+ offset = next_pos;
1282
+
1283
+ } while(bResult);
1284
+ }
1285
+
1286
+ FreeImage_CloseMemory(hPngMemory);
1287
+ hPngMemory = NULL;
1288
+ }
1289
+
1290
+ // --- write a IEND chunk ---
1291
+ mng_WriteChunk(mng_IEND, NULL, 0, hJngMemory);
1292
+
1293
+ // write the JNG on output stream
1294
+ {
1295
+ BYTE *jng_data = NULL;
1296
+ DWORD size_in_bytes = 0;
1297
+ FreeImage_AcquireMemory(hJngMemory, &jng_data, &size_in_bytes);
1298
+ io->write_proc(jng_data, 1, size_in_bytes, handle);
1299
+ }
1300
+
1301
+ FreeImage_CloseMemory(hJngMemory);
1302
+ FreeImage_CloseMemory(hJpegMemory);
1303
+ FreeImage_CloseMemory(hPngMemory);
1304
+
1305
+ return TRUE;
1306
+
1307
+ } catch(const char *text) {
1308
+ FreeImage_CloseMemory(hJngMemory);
1309
+ FreeImage_CloseMemory(hJpegMemory);
1310
+ FreeImage_CloseMemory(hPngMemory);
1311
+ if(dib_rgb && (dib_rgb != dib)) {
1312
+ FreeImage_Unload(dib_rgb);
1313
+ }
1314
+ FreeImage_Unload(dib_alpha);
1315
+ if(text) {
1316
+ FreeImage_OutputMessageProc(format_id, text);
1317
+ }
1318
+ return FALSE;
1319
+ }
1320
+ }