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,1494 @@
1
+ // ==========================================================
2
+ // BMP Loader and Writer
3
+ //
4
+ // Design and implementation by
5
+ // - Floris van den Berg (flvdberg@wxs.nl)
6
+ // - Markus Loibl (markus.loibl@epost.de)
7
+ // - Martin Weber (martweb@gmx.net)
8
+ // - Herv� Drolon (drolon@infonie.fr)
9
+ // - Michal Novotny (michal@etc.cz)
10
+ //
11
+ // This file is part of FreeImage 3
12
+ //
13
+ // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
14
+ // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
15
+ // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
16
+ // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
17
+ // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
18
+ // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
19
+ // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
20
+ // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
21
+ // THIS DISCLAIMER.
22
+ //
23
+ // Use at your own risk!
24
+ // ==========================================================
25
+
26
+ #include "FreeImage.h"
27
+ #include "Utilities.h"
28
+
29
+ // ----------------------------------------------------------
30
+ // Constants + headers
31
+ // ----------------------------------------------------------
32
+
33
+ static const BYTE RLE_COMMAND = 0;
34
+ static const BYTE RLE_ENDOFLINE = 0;
35
+ static const BYTE RLE_ENDOFBITMAP = 1;
36
+ static const BYTE RLE_DELTA = 2;
37
+
38
+ static const BYTE BI_RGB = 0; // compression: none
39
+ static const BYTE BI_RLE8 = 1; // compression: RLE 8-bit/pixel
40
+ static const BYTE BI_RLE4 = 2; // compression: RLE 4-bit/pixel
41
+ static const BYTE BI_BITFIELDS = 3; // compression: Bit field or Huffman 1D compression for BITMAPCOREHEADER2
42
+ static const BYTE BI_JPEG = 4; // compression: JPEG or RLE-24 compression for BITMAPCOREHEADER2
43
+ static const BYTE BI_PNG = 5; // compression: PNG
44
+ static const BYTE BI_ALPHABITFIELDS = 6; // compression: Bit field (this value is valid in Windows CE .NET 4.0 and later)
45
+
46
+ // ----------------------------------------------------------
47
+
48
+ #ifdef _WIN32
49
+ #pragma pack(push, 1)
50
+ #else
51
+ #pragma pack(1)
52
+ #endif
53
+
54
+ typedef struct tagBITMAPCOREHEADER {
55
+ DWORD bcSize;
56
+ WORD bcWidth;
57
+ WORD bcHeight;
58
+ WORD bcPlanes;
59
+ WORD bcBitCnt;
60
+ } BITMAPCOREHEADER, *PBITMAPCOREHEADER;
61
+
62
+ typedef struct tagBITMAPINFOOS2_1X_HEADER {
63
+ DWORD biSize;
64
+ WORD biWidth;
65
+ WORD biHeight;
66
+ WORD biPlanes;
67
+ WORD biBitCount;
68
+ } BITMAPINFOOS2_1X_HEADER, *PBITMAPINFOOS2_1X_HEADER;
69
+
70
+ typedef struct tagBITMAPFILEHEADER {
71
+ WORD bfType; //! The file type
72
+ DWORD bfSize; //! The size, in bytes, of the bitmap file
73
+ WORD bfReserved1; //! Reserved; must be zero
74
+ WORD bfReserved2; //! Reserved; must be zero
75
+ DWORD bfOffBits; //! The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits
76
+ } BITMAPFILEHEADER, *PBITMAPFILEHEADER;
77
+
78
+ #ifdef _WIN32
79
+ #pragma pack(pop)
80
+ #else
81
+ #pragma pack()
82
+ #endif
83
+
84
+ // ==========================================================
85
+ // Plugin Interface
86
+ // ==========================================================
87
+
88
+ static int s_format_id;
89
+
90
+ // ==========================================================
91
+ // Internal functions
92
+ // ==========================================================
93
+
94
+ #ifdef FREEIMAGE_BIGENDIAN
95
+ static void
96
+ SwapInfoHeader(BITMAPINFOHEADER *header) {
97
+ SwapLong(&header->biSize);
98
+ SwapLong((DWORD *)&header->biWidth);
99
+ SwapLong((DWORD *)&header->biHeight);
100
+ SwapShort(&header->biPlanes);
101
+ SwapShort(&header->biBitCount);
102
+ SwapLong(&header->biCompression);
103
+ SwapLong(&header->biSizeImage);
104
+ SwapLong((DWORD *)&header->biXPelsPerMeter);
105
+ SwapLong((DWORD *)&header->biYPelsPerMeter);
106
+ SwapLong(&header->biClrUsed);
107
+ SwapLong(&header->biClrImportant);
108
+ }
109
+
110
+ static void
111
+ SwapCoreHeader(BITMAPCOREHEADER *header) {
112
+ SwapLong(&header->bcSize);
113
+ SwapShort(&header->bcWidth);
114
+ SwapShort(&header->bcHeight);
115
+ SwapShort(&header->bcPlanes);
116
+ SwapShort(&header->bcBitCnt);
117
+ }
118
+
119
+ static void
120
+ SwapOS21XHeader(BITMAPINFOOS2_1X_HEADER *header) {
121
+ SwapLong(&header->biSize);
122
+ SwapShort(&header->biWidth);
123
+ SwapShort(&header->biHeight);
124
+ SwapShort(&header->biPlanes);
125
+ SwapShort(&header->biBitCount);
126
+ }
127
+
128
+ static void
129
+ SwapFileHeader(BITMAPFILEHEADER *header) {
130
+ SwapShort(&header->bfType);
131
+ SwapLong(&header->bfSize);
132
+ SwapShort(&header->bfReserved1);
133
+ SwapShort(&header->bfReserved2);
134
+ SwapLong(&header->bfOffBits);
135
+ }
136
+ #endif
137
+
138
+ // --------------------------------------------------------------------------
139
+
140
+ /**
141
+ Load uncompressed image pixels for 1-, 4-, 8-, 16-, 24- and 32-bit dib
142
+ @param io FreeImage IO
143
+ @param handle FreeImage IO handle
144
+ @param dib Image to be loaded
145
+ @param height Image height
146
+ @param pitch Image pitch
147
+ @param bit_count Image bit-depth (1-, 4-, 8-, 16-, 24- or 32-bit)
148
+ @return Returns TRUE if successful, returns FALSE otherwise
149
+ */
150
+ static BOOL
151
+ LoadPixelData(FreeImageIO *io, fi_handle handle, FIBITMAP *dib, int height, unsigned pitch, unsigned bit_count) {
152
+ unsigned count = 0;
153
+
154
+ // Load pixel data
155
+ // NB: height can be < 0 for BMP data
156
+ if (height > 0) {
157
+ count = io->read_proc((void *)FreeImage_GetBits(dib), height * pitch, 1, handle);
158
+ if(count != 1) {
159
+ return FALSE;
160
+ }
161
+ } else {
162
+ int positiveHeight = abs(height);
163
+ for (int c = 0; c < positiveHeight; ++c) {
164
+ count = io->read_proc((void *)FreeImage_GetScanLine(dib, positiveHeight - c - 1), pitch, 1, handle);
165
+ if(count != 1) {
166
+ return FALSE;
167
+ }
168
+ }
169
+ }
170
+
171
+ // swap as needed
172
+ #ifdef FREEIMAGE_BIGENDIAN
173
+ if (bit_count == 16) {
174
+ for(unsigned y = 0; y < FreeImage_GetHeight(dib); y++) {
175
+ WORD *pixel = (WORD *)FreeImage_GetScanLine(dib, y);
176
+ for(unsigned x = 0; x < FreeImage_GetWidth(dib); x++) {
177
+ SwapShort(pixel);
178
+ pixel++;
179
+ }
180
+ }
181
+ }
182
+ #endif
183
+ #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB
184
+ if (bit_count == 24 || bit_count == 32) {
185
+ for(unsigned y = 0; y < FreeImage_GetHeight(dib); y++) {
186
+ BYTE *pixel = FreeImage_GetScanLine(dib, y);
187
+ for(unsigned x = 0; x < FreeImage_GetWidth(dib); x++) {
188
+ INPLACESWAP(pixel[0], pixel[2]);
189
+ pixel += (bit_count >> 3);
190
+ }
191
+ }
192
+ }
193
+ #endif
194
+
195
+ return TRUE;
196
+ }
197
+
198
+ /**
199
+ Load image pixels for 4-bit RLE compressed dib
200
+ @param io FreeImage IO
201
+ @param handle FreeImage IO handle
202
+ @param width Image width
203
+ @param height Image height
204
+ @param dib Image to be loaded
205
+ @return Returns TRUE if successful, returns FALSE otherwise
206
+ */
207
+ static BOOL
208
+ LoadPixelDataRLE4(FreeImageIO *io, fi_handle handle, int width, int height, FIBITMAP *dib) {
209
+ int status_byte = 0;
210
+ BYTE second_byte = 0;
211
+ int bits = 0;
212
+
213
+ BYTE *pixels = NULL; // temporary 8-bit buffer
214
+
215
+ try {
216
+ height = abs(height);
217
+
218
+ pixels = (BYTE*)malloc(width * height * sizeof(BYTE));
219
+ if(!pixels) throw(1);
220
+ memset(pixels, 0, width * height * sizeof(BYTE));
221
+
222
+ BYTE *q = pixels;
223
+ BYTE *end = pixels + height * width;
224
+
225
+ for (int scanline = 0; scanline < height; ) {
226
+ if (q < pixels || q >= end) {
227
+ break;
228
+ }
229
+ if(io->read_proc(&status_byte, sizeof(BYTE), 1, handle) != 1) {
230
+ throw(1);
231
+ }
232
+ if (status_byte != 0) {
233
+ status_byte = (int)MIN((size_t)status_byte, (size_t)(end - q));
234
+ // Encoded mode
235
+ if(io->read_proc(&second_byte, sizeof(BYTE), 1, handle) != 1) {
236
+ throw(1);
237
+ }
238
+ for (int i = 0; i < status_byte; i++) {
239
+ *q++=(BYTE)((i & 0x01) ? (second_byte & 0x0f) : ((second_byte >> 4) & 0x0f));
240
+ }
241
+ bits += status_byte;
242
+ }
243
+ else {
244
+ // Escape mode
245
+ if(io->read_proc(&status_byte, sizeof(BYTE), 1, handle) != 1) {
246
+ throw(1);
247
+ }
248
+ switch (status_byte) {
249
+ case RLE_ENDOFLINE:
250
+ {
251
+ // End of line
252
+ bits = 0;
253
+ scanline++;
254
+ q = pixels + scanline*width;
255
+ }
256
+ break;
257
+
258
+ case RLE_ENDOFBITMAP:
259
+ // End of bitmap
260
+ q = end;
261
+ break;
262
+
263
+ case RLE_DELTA:
264
+ {
265
+ // read the delta values
266
+
267
+ BYTE delta_x = 0;
268
+ BYTE delta_y = 0;
269
+
270
+ if(io->read_proc(&delta_x, sizeof(BYTE), 1, handle) != 1) {
271
+ throw(1);
272
+ }
273
+ if(io->read_proc(&delta_y, sizeof(BYTE), 1, handle) != 1) {
274
+ throw(1);
275
+ }
276
+
277
+ // apply them
278
+
279
+ bits += delta_x;
280
+ scanline += delta_y;
281
+ q = pixels + scanline*width+bits;
282
+ }
283
+ break;
284
+
285
+ default:
286
+ {
287
+ // Absolute mode
288
+ status_byte = (int)MIN((size_t)status_byte, (size_t)(end - q));
289
+ for (int i = 0; i < status_byte; i++) {
290
+ if ((i & 0x01) == 0) {
291
+ if(io->read_proc(&second_byte, sizeof(BYTE), 1, handle) != 1) {
292
+ throw(1);
293
+ }
294
+ }
295
+ *q++=(BYTE)((i & 0x01) ? (second_byte & 0x0f) : ((second_byte >> 4) & 0x0f));
296
+ }
297
+ bits += status_byte;
298
+ // Read pad byte
299
+ if (((status_byte & 0x03) == 1) || ((status_byte & 0x03) == 2)) {
300
+ BYTE padding = 0;
301
+ if(io->read_proc(&padding, sizeof(BYTE), 1, handle) != 1) {
302
+ throw(1);
303
+ }
304
+ }
305
+ }
306
+ break;
307
+ }
308
+ }
309
+ }
310
+
311
+ {
312
+ // Convert to 4-bit
313
+ for(int y = 0; y < height; y++) {
314
+ const BYTE *src = (BYTE*)pixels + y * width;
315
+ BYTE *dst = FreeImage_GetScanLine(dib, y);
316
+
317
+ BOOL hinibble = TRUE;
318
+
319
+ for (int cols = 0; cols < width; cols++){
320
+ if (hinibble) {
321
+ dst[cols >> 1] = (src[cols] << 4);
322
+ } else {
323
+ dst[cols >> 1] |= src[cols];
324
+ }
325
+
326
+ hinibble = !hinibble;
327
+ }
328
+ }
329
+ }
330
+
331
+ free(pixels);
332
+
333
+ return TRUE;
334
+
335
+ } catch(int) {
336
+ if(pixels) free(pixels);
337
+ return FALSE;
338
+ }
339
+ }
340
+
341
+ /**
342
+ Load image pixels for 8-bit RLE compressed dib
343
+ @param io FreeImage IO
344
+ @param handle FreeImage IO handle
345
+ @param width Image width
346
+ @param height Image height
347
+ @param dib Image to be loaded
348
+ @return Returns TRUE if successful, returns FALSE otherwise
349
+ */
350
+ static BOOL
351
+ LoadPixelDataRLE8(FreeImageIO *io, fi_handle handle, int width, int height, FIBITMAP *dib) {
352
+ BYTE status_byte = 0;
353
+ BYTE second_byte = 0;
354
+ int scanline = 0;
355
+ int bits = 0;
356
+
357
+ for (;;) {
358
+ if( io->read_proc(&status_byte, sizeof(BYTE), 1, handle) != 1) {
359
+ return FALSE;
360
+ }
361
+
362
+ switch (status_byte) {
363
+ case RLE_COMMAND :
364
+ if(io->read_proc(&status_byte, sizeof(BYTE), 1, handle) != 1) {
365
+ return FALSE;
366
+ }
367
+
368
+ switch (status_byte) {
369
+ case RLE_ENDOFLINE :
370
+ bits = 0;
371
+ scanline++;
372
+ break;
373
+
374
+ case RLE_ENDOFBITMAP :
375
+ return TRUE;
376
+
377
+ case RLE_DELTA :
378
+ {
379
+ // read the delta values
380
+
381
+ BYTE delta_x = 0;
382
+ BYTE delta_y = 0;
383
+
384
+ if(io->read_proc(&delta_x, sizeof(BYTE), 1, handle) != 1) {
385
+ return FALSE;
386
+ }
387
+ if(io->read_proc(&delta_y, sizeof(BYTE), 1, handle) != 1) {
388
+ return FALSE;
389
+ }
390
+
391
+ // apply them
392
+
393
+ bits += delta_x;
394
+ scanline += delta_y;
395
+
396
+ break;
397
+ }
398
+
399
+ default :
400
+ {
401
+ if(scanline >= abs(height)) {
402
+ return TRUE;
403
+ }
404
+
405
+ int count = MIN((int)status_byte, width - bits);
406
+
407
+ BYTE *sline = FreeImage_GetScanLine(dib, scanline);
408
+
409
+ if(io->read_proc((void *)(sline + bits), sizeof(BYTE) * count, 1, handle) != 1) {
410
+ return FALSE;
411
+ }
412
+
413
+ // align run length to even number of bytes
414
+
415
+ if ((status_byte & 1) == 1) {
416
+ if(io->read_proc(&second_byte, sizeof(BYTE), 1, handle) != 1) {
417
+ return FALSE;
418
+ }
419
+ }
420
+
421
+ bits += status_byte;
422
+
423
+ break;
424
+ }
425
+ }
426
+
427
+ break;
428
+
429
+ default :
430
+ {
431
+ if(scanline >= abs(height)) {
432
+ return TRUE;
433
+ }
434
+
435
+ int count = MIN((int)status_byte, width - bits);
436
+
437
+ BYTE *sline = FreeImage_GetScanLine(dib, scanline);
438
+
439
+ if(io->read_proc(&second_byte, sizeof(BYTE), 1, handle) != 1) {
440
+ return FALSE;
441
+ }
442
+
443
+ for (int i = 0; i < count; i++) {
444
+ *(sline + bits) = second_byte;
445
+
446
+ bits++;
447
+ }
448
+
449
+ break;
450
+ }
451
+ }
452
+ }
453
+ }
454
+
455
+ // --------------------------------------------------------------------------
456
+
457
+ static FIBITMAP *
458
+ LoadWindowsBMP(FreeImageIO *io, fi_handle handle, int flags, unsigned bitmap_bits_offset, int type) {
459
+ FIBITMAP *dib = NULL;
460
+
461
+ try {
462
+ BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS;
463
+
464
+ // load the info header
465
+
466
+ BITMAPINFOHEADER bih;
467
+
468
+ io->read_proc(&bih, sizeof(BITMAPINFOHEADER), 1, handle);
469
+ #ifdef FREEIMAGE_BIGENDIAN
470
+ SwapInfoHeader(&bih);
471
+ #endif
472
+
473
+ // keep some general information about the bitmap
474
+
475
+ unsigned used_colors = bih.biClrUsed;
476
+ int width = bih.biWidth;
477
+ int height = bih.biHeight; // WARNING: height can be < 0 => check each call using 'height' as a parameter
478
+ unsigned bit_count = bih.biBitCount;
479
+ unsigned compression = bih.biCompression;
480
+ unsigned pitch = CalculatePitch(CalculateLine(width, bit_count));
481
+
482
+ switch (bit_count) {
483
+ case 1 :
484
+ case 4 :
485
+ case 8 :
486
+ {
487
+ if ((used_colors == 0) || (used_colors > CalculateUsedPaletteEntries(bit_count))) {
488
+ used_colors = CalculateUsedPaletteEntries(bit_count);
489
+ }
490
+
491
+ // allocate enough memory to hold the bitmap (header, palette, pixels) and read the palette
492
+
493
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count);
494
+ if (dib == NULL) {
495
+ throw FI_MSG_ERROR_DIB_MEMORY;
496
+ }
497
+
498
+ // set resolution information
499
+ FreeImage_SetDotsPerMeterX(dib, bih.biXPelsPerMeter);
500
+ FreeImage_SetDotsPerMeterY(dib, bih.biYPelsPerMeter);
501
+
502
+ // seek to the end of the header (depending on the BMP header version)
503
+ // type == sizeof(BITMAPVxINFOHEADER)
504
+ switch(type) {
505
+ case 40: // sizeof(BITMAPINFOHEADER) - all Windows versions since Windows 3.0
506
+ break;
507
+ case 52: // sizeof(BITMAPV2INFOHEADER) (undocumented)
508
+ case 56: // sizeof(BITMAPV3INFOHEADER) (undocumented)
509
+ case 108: // sizeof(BITMAPV4HEADER) - all Windows versions since Windows 95/NT4 (not supported)
510
+ case 124: // sizeof(BITMAPV5HEADER) - Windows 98/2000 and newer (not supported)
511
+ io->seek_proc(handle, (long)(type - sizeof(BITMAPINFOHEADER)), SEEK_CUR);
512
+ break;
513
+ }
514
+
515
+ // load the palette
516
+
517
+ io->read_proc(FreeImage_GetPalette(dib), used_colors * sizeof(RGBQUAD), 1, handle);
518
+ #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB
519
+ RGBQUAD *pal = FreeImage_GetPalette(dib);
520
+ for(int i = 0; i < used_colors; i++) {
521
+ INPLACESWAP(pal[i].rgbRed, pal[i].rgbBlue);
522
+ }
523
+ #endif
524
+
525
+ if(header_only) {
526
+ // header only mode
527
+ return dib;
528
+ }
529
+
530
+ // seek to the actual pixel data.
531
+ // this is needed because sometimes the palette is larger than the entries it contains predicts
532
+ io->seek_proc(handle, bitmap_bits_offset, SEEK_SET);
533
+
534
+ // read the pixel data
535
+
536
+ switch (compression) {
537
+ case BI_RGB :
538
+ if( LoadPixelData(io, handle, dib, height, pitch, bit_count) ) {
539
+ return dib;
540
+ } else {
541
+ throw "Error encountered while decoding BMP data";
542
+ }
543
+ break;
544
+
545
+ case BI_RLE4 :
546
+ if( LoadPixelDataRLE4(io, handle, width, height, dib) ) {
547
+ return dib;
548
+ } else {
549
+ throw "Error encountered while decoding RLE4 BMP data";
550
+ }
551
+ break;
552
+
553
+ case BI_RLE8 :
554
+ if( LoadPixelDataRLE8(io, handle, width, height, dib) ) {
555
+ return dib;
556
+ } else {
557
+ throw "Error encountered while decoding RLE8 BMP data";
558
+ }
559
+ break;
560
+
561
+ default :
562
+ throw FI_MSG_ERROR_UNSUPPORTED_COMPRESSION;
563
+ }
564
+ }
565
+ break; // 1-, 4-, 8-bit
566
+
567
+ case 16 :
568
+ {
569
+ int use_bitfields = 0;
570
+ if (bih.biCompression == BI_BITFIELDS) use_bitfields = 3;
571
+ else if (bih.biCompression == BI_ALPHABITFIELDS) use_bitfields = 4;
572
+ else if (type == 52) use_bitfields = 3;
573
+ else if (type >= 56) use_bitfields = 4;
574
+
575
+ if (use_bitfields > 0) {
576
+ DWORD bitfields[4];
577
+ io->read_proc(bitfields, use_bitfields * sizeof(DWORD), 1, handle);
578
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, bitfields[0], bitfields[1], bitfields[2]);
579
+ } else {
580
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI16_555_RED_MASK, FI16_555_GREEN_MASK, FI16_555_BLUE_MASK);
581
+ }
582
+
583
+ if (dib == NULL) {
584
+ throw FI_MSG_ERROR_DIB_MEMORY;
585
+ }
586
+
587
+ // set resolution information
588
+ FreeImage_SetDotsPerMeterX(dib, bih.biXPelsPerMeter);
589
+ FreeImage_SetDotsPerMeterY(dib, bih.biYPelsPerMeter);
590
+
591
+ if(header_only) {
592
+ // header only mode
593
+ return dib;
594
+ }
595
+
596
+ // seek to the actual pixel data
597
+ io->seek_proc(handle, bitmap_bits_offset, SEEK_SET);
598
+
599
+ // load pixel data and swap as needed if OS is Big Endian
600
+ LoadPixelData(io, handle, dib, height, pitch, bit_count);
601
+
602
+ return dib;
603
+ }
604
+ break; // 16-bit
605
+
606
+ case 24 :
607
+ case 32 :
608
+ {
609
+ int use_bitfields = 0;
610
+ if (bih.biCompression == BI_BITFIELDS) use_bitfields = 3;
611
+ else if (bih.biCompression == BI_ALPHABITFIELDS) use_bitfields = 4;
612
+ else if (type == 52) use_bitfields = 3;
613
+ else if (type >= 56) use_bitfields = 4;
614
+
615
+ if (use_bitfields > 0) {
616
+ DWORD bitfields[4];
617
+ io->read_proc(bitfields, use_bitfields * sizeof(DWORD), 1, handle);
618
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, bitfields[0], bitfields[1], bitfields[2]);
619
+ } else {
620
+ if( bit_count == 32 ) {
621
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
622
+ } else {
623
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
624
+ }
625
+ }
626
+
627
+ if (dib == NULL) {
628
+ throw FI_MSG_ERROR_DIB_MEMORY;
629
+ }
630
+
631
+ // set resolution information
632
+ FreeImage_SetDotsPerMeterX(dib, bih.biXPelsPerMeter);
633
+ FreeImage_SetDotsPerMeterY(dib, bih.biYPelsPerMeter);
634
+
635
+ if(header_only) {
636
+ // header only mode
637
+ return dib;
638
+ }
639
+
640
+ // Skip over the optional palette
641
+ // A 24 or 32 bit DIB may contain a palette for faster color reduction
642
+ // i.e. you can have (FreeImage_GetColorsUsed(dib) > 0)
643
+
644
+ // seek to the actual pixel data
645
+ io->seek_proc(handle, bitmap_bits_offset, SEEK_SET);
646
+
647
+ // read in the bitmap bits
648
+ // load pixel data and swap as needed if OS is Big Endian
649
+ LoadPixelData(io, handle, dib, height, pitch, bit_count);
650
+
651
+ // check if the bitmap contains transparency, if so enable it in the header
652
+
653
+ FreeImage_SetTransparent(dib, (FreeImage_GetColorType(dib) == FIC_RGBALPHA));
654
+
655
+ return dib;
656
+ }
657
+ break; // 24-, 32-bit
658
+ }
659
+ } catch(const char *message) {
660
+ if(dib) {
661
+ FreeImage_Unload(dib);
662
+ }
663
+ if(message) {
664
+ FreeImage_OutputMessageProc(s_format_id, message);
665
+ }
666
+ }
667
+
668
+ return NULL;
669
+ }
670
+
671
+ // --------------------------------------------------------------------------
672
+
673
+ static FIBITMAP *
674
+ LoadOS22XBMP(FreeImageIO *io, fi_handle handle, int flags, unsigned bitmap_bits_offset) {
675
+ FIBITMAP *dib = NULL;
676
+
677
+ try {
678
+ BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS;
679
+
680
+ // load the info header
681
+
682
+ BITMAPINFOHEADER bih;
683
+
684
+ io->read_proc(&bih, sizeof(BITMAPINFOHEADER), 1, handle);
685
+ #ifdef FREEIMAGE_BIGENDIAN
686
+ SwapInfoHeader(&bih);
687
+ #endif
688
+
689
+ // keep some general information about the bitmap
690
+
691
+ unsigned used_colors = bih.biClrUsed;
692
+ int width = bih.biWidth;
693
+ int height = bih.biHeight; // WARNING: height can be < 0 => check each read_proc using 'height' as a parameter
694
+ unsigned bit_count = bih.biBitCount;
695
+ unsigned compression = bih.biCompression;
696
+ unsigned pitch = CalculatePitch(CalculateLine(width, bit_count));
697
+
698
+ switch (bit_count) {
699
+ case 1 :
700
+ case 4 :
701
+ case 8 :
702
+ {
703
+ if ((used_colors == 0) || (used_colors > CalculateUsedPaletteEntries(bit_count)))
704
+ used_colors = CalculateUsedPaletteEntries(bit_count);
705
+
706
+ // allocate enough memory to hold the bitmap (header, palette, pixels) and read the palette
707
+
708
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count);
709
+
710
+ if (dib == NULL) {
711
+ throw FI_MSG_ERROR_DIB_MEMORY;
712
+ }
713
+
714
+ // set resolution information
715
+ FreeImage_SetDotsPerMeterX(dib, bih.biXPelsPerMeter);
716
+ FreeImage_SetDotsPerMeterY(dib, bih.biYPelsPerMeter);
717
+
718
+ // load the palette
719
+ // note that it may contain RGB or RGBA values : we will calculate this
720
+ unsigned pal_size = (bitmap_bits_offset - sizeof(BITMAPFILEHEADER) - bih.biSize) / used_colors;
721
+
722
+ io->seek_proc(handle, sizeof(BITMAPFILEHEADER) + bih.biSize, SEEK_SET);
723
+
724
+ RGBQUAD *pal = FreeImage_GetPalette(dib);
725
+
726
+ if(pal_size == 4) {
727
+ for (unsigned count = 0; count < used_colors; count++) {
728
+ FILE_BGRA bgra;
729
+
730
+ io->read_proc(&bgra, sizeof(FILE_BGRA), 1, handle);
731
+
732
+ pal[count].rgbRed = bgra.r;
733
+ pal[count].rgbGreen = bgra.g;
734
+ pal[count].rgbBlue = bgra.b;
735
+ }
736
+ } else if(pal_size == 3) {
737
+ for (unsigned count = 0; count < used_colors; count++) {
738
+ FILE_BGR bgr;
739
+
740
+ io->read_proc(&bgr, sizeof(FILE_BGR), 1, handle);
741
+
742
+ pal[count].rgbRed = bgr.r;
743
+ pal[count].rgbGreen = bgr.g;
744
+ pal[count].rgbBlue = bgr.b;
745
+ }
746
+ }
747
+
748
+ if(header_only) {
749
+ // header only mode
750
+ return dib;
751
+ }
752
+
753
+ // seek to the actual pixel data.
754
+ // this is needed because sometimes the palette is larger than the entries it contains predicts
755
+
756
+ if (bitmap_bits_offset > (sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (used_colors * 3))) {
757
+ io->seek_proc(handle, bitmap_bits_offset, SEEK_SET);
758
+ }
759
+
760
+ // read the pixel data
761
+
762
+ switch (compression) {
763
+ case BI_RGB :
764
+ // load pixel data
765
+ LoadPixelData(io, handle, dib, height, pitch, bit_count);
766
+ return dib;
767
+
768
+ case BI_RLE4 :
769
+ if( LoadPixelDataRLE4(io, handle, width, height, dib) ) {
770
+ return dib;
771
+ } else {
772
+ throw "Error encountered while decoding RLE4 BMP data";
773
+ }
774
+ break;
775
+
776
+ case BI_RLE8 :
777
+ if( LoadPixelDataRLE8(io, handle, width, height, dib) ) {
778
+ return dib;
779
+ } else {
780
+ throw "Error encountered while decoding RLE8 BMP data";
781
+ }
782
+ break;
783
+
784
+ default :
785
+ throw FI_MSG_ERROR_UNSUPPORTED_COMPRESSION;
786
+ }
787
+ }
788
+
789
+ case 16 :
790
+ {
791
+ if (bih.biCompression == 3) {
792
+ DWORD bitfields[3];
793
+
794
+ io->read_proc(bitfields, 3 * sizeof(DWORD), 1, handle);
795
+
796
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, bitfields[0], bitfields[1], bitfields[2]);
797
+ } else {
798
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI16_555_RED_MASK, FI16_555_GREEN_MASK, FI16_555_BLUE_MASK);
799
+ }
800
+
801
+ if (dib == NULL) {
802
+ throw FI_MSG_ERROR_DIB_MEMORY;
803
+ }
804
+
805
+ // set resolution information
806
+ FreeImage_SetDotsPerMeterX(dib, bih.biXPelsPerMeter);
807
+ FreeImage_SetDotsPerMeterY(dib, bih.biYPelsPerMeter);
808
+
809
+ if(header_only) {
810
+ // header only mode
811
+ return dib;
812
+ }
813
+
814
+ if (bitmap_bits_offset > (sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (used_colors * 3))) {
815
+ io->seek_proc(handle, bitmap_bits_offset, SEEK_SET);
816
+ }
817
+
818
+ // load pixel data and swap as needed if OS is Big Endian
819
+ LoadPixelData(io, handle, dib, height, pitch, bit_count);
820
+
821
+ return dib;
822
+ }
823
+
824
+ case 24 :
825
+ case 32 :
826
+ {
827
+ if( bit_count == 32 ) {
828
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
829
+ } else {
830
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
831
+ }
832
+
833
+ if (dib == NULL) {
834
+ throw FI_MSG_ERROR_DIB_MEMORY;
835
+ }
836
+
837
+ // set resolution information
838
+ FreeImage_SetDotsPerMeterX(dib, bih.biXPelsPerMeter);
839
+ FreeImage_SetDotsPerMeterY(dib, bih.biYPelsPerMeter);
840
+
841
+ if(header_only) {
842
+ // header only mode
843
+ return dib;
844
+ }
845
+
846
+ // Skip over the optional palette
847
+ // A 24 or 32 bit DIB may contain a palette for faster color reduction
848
+
849
+ if (bitmap_bits_offset > (sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (used_colors * 3))) {
850
+ io->seek_proc(handle, bitmap_bits_offset, SEEK_SET);
851
+ }
852
+
853
+ // read in the bitmap bits
854
+ // load pixel data and swap as needed if OS is Big Endian
855
+ LoadPixelData(io, handle, dib, height, pitch, bit_count);
856
+
857
+ // check if the bitmap contains transparency, if so enable it in the header
858
+
859
+ FreeImage_SetTransparent(dib, (FreeImage_GetColorType(dib) == FIC_RGBALPHA));
860
+
861
+ return dib;
862
+ }
863
+ }
864
+ } catch(const char *message) {
865
+ if(dib)
866
+ FreeImage_Unload(dib);
867
+
868
+ FreeImage_OutputMessageProc(s_format_id, message);
869
+ }
870
+
871
+ return NULL;
872
+ }
873
+
874
+ // --------------------------------------------------------------------------
875
+
876
+ static FIBITMAP *
877
+ LoadOS21XBMP(FreeImageIO *io, fi_handle handle, int flags, unsigned bitmap_bits_offset) {
878
+ FIBITMAP *dib = NULL;
879
+
880
+ try {
881
+ BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS;
882
+
883
+ BITMAPINFOOS2_1X_HEADER bios2_1x;
884
+
885
+ io->read_proc(&bios2_1x, sizeof(BITMAPINFOOS2_1X_HEADER), 1, handle);
886
+ #ifdef FREEIMAGE_BIGENDIAN
887
+ SwapOS21XHeader(&bios2_1x);
888
+ #endif
889
+ // keep some general information about the bitmap
890
+
891
+ unsigned used_colors = 0;
892
+ unsigned width = bios2_1x.biWidth;
893
+ unsigned height = bios2_1x.biHeight; // WARNING: height can be < 0 => check each read_proc using 'height' as a parameter
894
+ unsigned bit_count = bios2_1x.biBitCount;
895
+ unsigned pitch = CalculatePitch(CalculateLine(width, bit_count));
896
+
897
+ switch (bit_count) {
898
+ case 1 :
899
+ case 4 :
900
+ case 8 :
901
+ {
902
+ used_colors = CalculateUsedPaletteEntries(bit_count);
903
+
904
+ // allocate enough memory to hold the bitmap (header, palette, pixels) and read the palette
905
+
906
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count);
907
+
908
+ if (dib == NULL) {
909
+ throw FI_MSG_ERROR_DIB_MEMORY;
910
+ }
911
+
912
+ // set resolution information to default values (72 dpi in english units)
913
+ FreeImage_SetDotsPerMeterX(dib, 2835);
914
+ FreeImage_SetDotsPerMeterY(dib, 2835);
915
+
916
+ // load the palette
917
+
918
+ RGBQUAD *pal = FreeImage_GetPalette(dib);
919
+
920
+ for (unsigned count = 0; count < used_colors; count++) {
921
+ FILE_BGR bgr;
922
+
923
+ io->read_proc(&bgr, sizeof(FILE_BGR), 1, handle);
924
+
925
+ pal[count].rgbRed = bgr.r;
926
+ pal[count].rgbGreen = bgr.g;
927
+ pal[count].rgbBlue = bgr.b;
928
+ }
929
+
930
+ if(header_only) {
931
+ // header only mode
932
+ return dib;
933
+ }
934
+
935
+ // Skip over the optional palette
936
+ // A 24 or 32 bit DIB may contain a palette for faster color reduction
937
+
938
+ io->seek_proc(handle, bitmap_bits_offset, SEEK_SET);
939
+
940
+ // read the pixel data
941
+
942
+ // load pixel data
943
+ LoadPixelData(io, handle, dib, height, pitch, bit_count);
944
+
945
+ return dib;
946
+ }
947
+
948
+ case 16 :
949
+ {
950
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI16_555_RED_MASK, FI16_555_GREEN_MASK, FI16_555_BLUE_MASK);
951
+
952
+ if (dib == NULL) {
953
+ throw FI_MSG_ERROR_DIB_MEMORY;
954
+ }
955
+
956
+ // set resolution information to default values (72 dpi in english units)
957
+ FreeImage_SetDotsPerMeterX(dib, 2835);
958
+ FreeImage_SetDotsPerMeterY(dib, 2835);
959
+
960
+ if(header_only) {
961
+ // header only mode
962
+ return dib;
963
+ }
964
+
965
+ // load pixel data and swap as needed if OS is Big Endian
966
+ LoadPixelData(io, handle, dib, height, pitch, bit_count);
967
+
968
+ return dib;
969
+ }
970
+
971
+ case 24 :
972
+ case 32 :
973
+ {
974
+ if( bit_count == 32 ) {
975
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
976
+ } else {
977
+ dib = FreeImage_AllocateHeader(header_only, width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
978
+ }
979
+
980
+ if (dib == NULL) {
981
+ throw FI_MSG_ERROR_DIB_MEMORY;
982
+ }
983
+
984
+ // set resolution information to default values (72 dpi in english units)
985
+ FreeImage_SetDotsPerMeterX(dib, 2835);
986
+ FreeImage_SetDotsPerMeterY(dib, 2835);
987
+
988
+ if(header_only) {
989
+ // header only mode
990
+ return dib;
991
+ }
992
+
993
+ // Skip over the optional palette
994
+ // A 24 or 32 bit DIB may contain a palette for faster color reduction
995
+
996
+ // load pixel data and swap as needed if OS is Big Endian
997
+ LoadPixelData(io, handle, dib, height, pitch, bit_count);
998
+
999
+ // check if the bitmap contains transparency, if so enable it in the header
1000
+
1001
+ FreeImage_SetTransparent(dib, (FreeImage_GetColorType(dib) == FIC_RGBALPHA));
1002
+
1003
+ return dib;
1004
+ }
1005
+ }
1006
+ } catch(const char *message) {
1007
+ if(dib)
1008
+ FreeImage_Unload(dib);
1009
+
1010
+ FreeImage_OutputMessageProc(s_format_id, message);
1011
+ }
1012
+
1013
+ return NULL;
1014
+ }
1015
+
1016
+ // ==========================================================
1017
+ // Plugin Implementation
1018
+ // ==========================================================
1019
+
1020
+ static const char * DLL_CALLCONV
1021
+ Format() {
1022
+ return "BMP";
1023
+ }
1024
+
1025
+ static const char * DLL_CALLCONV
1026
+ Description() {
1027
+ return "Windows or OS/2 Bitmap";
1028
+ }
1029
+
1030
+ static const char * DLL_CALLCONV
1031
+ Extension() {
1032
+ return "bmp";
1033
+ }
1034
+
1035
+ static const char * DLL_CALLCONV
1036
+ RegExpr() {
1037
+ return "^BM";
1038
+ }
1039
+
1040
+ static const char * DLL_CALLCONV
1041
+ MimeType() {
1042
+ return "image/bmp";
1043
+ }
1044
+
1045
+ static BOOL DLL_CALLCONV
1046
+ Validate(FreeImageIO *io, fi_handle handle) {
1047
+ BYTE bmp_signature1[] = { 0x42, 0x4D };
1048
+ BYTE bmp_signature2[] = { 0x42, 0x41 };
1049
+ BYTE signature[2] = { 0, 0 };
1050
+
1051
+ io->read_proc(signature, 1, sizeof(bmp_signature1), handle);
1052
+
1053
+ if (memcmp(bmp_signature1, signature, sizeof(bmp_signature1)) == 0)
1054
+ return TRUE;
1055
+
1056
+ if (memcmp(bmp_signature2, signature, sizeof(bmp_signature2)) == 0)
1057
+ return TRUE;
1058
+
1059
+ return FALSE;
1060
+ }
1061
+
1062
+ static BOOL DLL_CALLCONV
1063
+ SupportsExportDepth(int depth) {
1064
+ return (
1065
+ (depth == 1) ||
1066
+ (depth == 4) ||
1067
+ (depth == 8) ||
1068
+ (depth == 16) ||
1069
+ (depth == 24) ||
1070
+ (depth == 32)
1071
+ );
1072
+ }
1073
+
1074
+ static BOOL DLL_CALLCONV
1075
+ SupportsExportType(FREE_IMAGE_TYPE type) {
1076
+ return (type == FIT_BITMAP) ? TRUE : FALSE;
1077
+ }
1078
+
1079
+ static BOOL DLL_CALLCONV
1080
+ SupportsNoPixels() {
1081
+ return TRUE;
1082
+ }
1083
+
1084
+ // ----------------------------------------------------------
1085
+
1086
+ static FIBITMAP * DLL_CALLCONV
1087
+ Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
1088
+ if (handle != NULL) {
1089
+ BITMAPFILEHEADER bitmapfileheader;
1090
+ DWORD type = 0;
1091
+
1092
+ // we use this offset value to make seemingly absolute seeks relative in the file
1093
+
1094
+ long offset_in_file = io->tell_proc(handle);
1095
+
1096
+ // read the fileheader
1097
+
1098
+ io->read_proc(&bitmapfileheader, sizeof(BITMAPFILEHEADER), 1, handle);
1099
+ #ifdef FREEIMAGE_BIGENDIAN
1100
+ SwapFileHeader(&bitmapfileheader);
1101
+ #endif
1102
+
1103
+ // check the signature
1104
+
1105
+ if((bitmapfileheader.bfType != 0x4D42) && (bitmapfileheader.bfType != 0x4142)) {
1106
+ FreeImage_OutputMessageProc(s_format_id, FI_MSG_ERROR_MAGIC_NUMBER);
1107
+ return NULL;
1108
+ }
1109
+
1110
+ // read the first byte of the infoheader
1111
+
1112
+ io->read_proc(&type, sizeof(DWORD), 1, handle);
1113
+ io->seek_proc(handle, 0 - (long)sizeof(DWORD), SEEK_CUR);
1114
+ #ifdef FREEIMAGE_BIGENDIAN
1115
+ SwapLong(&type);
1116
+ #endif
1117
+
1118
+ // call the appropriate load function for the found bitmap type
1119
+
1120
+ switch(type) {
1121
+ case 12:
1122
+ // OS/2 and also all Windows versions since Windows 3.0
1123
+ return LoadOS21XBMP(io, handle, flags, offset_in_file + bitmapfileheader.bfOffBits);
1124
+
1125
+ case 64:
1126
+ // OS/2
1127
+ return LoadOS22XBMP(io, handle, flags, offset_in_file + bitmapfileheader.bfOffBits);
1128
+
1129
+ case 40: // BITMAPINFOHEADER - all Windows versions since Windows 3.0
1130
+ case 52: // BITMAPV2INFOHEADER (undocumented, partially supported)
1131
+ case 56: // BITMAPV3INFOHEADER (undocumented, partially supported)
1132
+ case 108: // BITMAPV4HEADER - all Windows versions since Windows 95/NT4 (partially supported)
1133
+ case 124: // BITMAPV5HEADER - Windows 98/2000 and newer (partially supported)
1134
+ return LoadWindowsBMP(io, handle, flags, offset_in_file + bitmapfileheader.bfOffBits, type);
1135
+
1136
+ default:
1137
+ break;
1138
+ }
1139
+
1140
+ FreeImage_OutputMessageProc(s_format_id, "unknown bmp subtype with id %d", type);
1141
+ }
1142
+
1143
+ return NULL;
1144
+ }
1145
+
1146
+ // ----------------------------------------------------------
1147
+
1148
+ /**
1149
+ Encode a 8-bit source buffer into a 8-bit target buffer using a RLE compression algorithm.
1150
+ The size of the target buffer must be equal to the size of the source buffer.
1151
+ On return, the function will return the real size of the target buffer, which should be less that or equal to the source buffer size.
1152
+ @param target 8-bit Target buffer
1153
+ @param source 8-bit Source buffer
1154
+ @param size Source/Target input buffer size
1155
+ @return Returns the target buffer size
1156
+ */
1157
+ static int
1158
+ RLEEncodeLine(BYTE *target, BYTE *source, int size) {
1159
+ BYTE buffer[256];
1160
+ int buffer_size = 0;
1161
+ int target_pos = 0;
1162
+
1163
+ for (int i = 0; i < size; ++i) {
1164
+ if ((i < size - 1) && (source[i] == source[i + 1])) {
1165
+ // find a solid block of same bytes
1166
+
1167
+ int j = i + 1;
1168
+ int jmax = 254 + i;
1169
+
1170
+ while ((j < size - 1) && (j < jmax) && (source[j] == source[j + 1]))
1171
+ ++j;
1172
+
1173
+ // if the block is larger than 3 bytes, use it
1174
+ // else put the data into the larger pool
1175
+
1176
+ if (((j - i) + 1) > 3) {
1177
+ // don't forget to write what we already have in the buffer
1178
+
1179
+ switch(buffer_size) {
1180
+ case 0 :
1181
+ break;
1182
+
1183
+ case RLE_DELTA :
1184
+ target[target_pos++] = 1;
1185
+ target[target_pos++] = buffer[0];
1186
+ target[target_pos++] = 1;
1187
+ target[target_pos++] = buffer[1];
1188
+ break;
1189
+
1190
+ case RLE_ENDOFBITMAP :
1191
+ target[target_pos++] = (BYTE)buffer_size;
1192
+ target[target_pos++] = buffer[0];
1193
+ break;
1194
+
1195
+ default :
1196
+ target[target_pos++] = RLE_COMMAND;
1197
+ target[target_pos++] = (BYTE)buffer_size;
1198
+ memcpy(target + target_pos, buffer, buffer_size);
1199
+
1200
+ // prepare for next run
1201
+
1202
+ target_pos += buffer_size;
1203
+
1204
+ if ((buffer_size & 1) == 1)
1205
+ target_pos++;
1206
+
1207
+ break;
1208
+ }
1209
+
1210
+ // write the continuous data
1211
+
1212
+ target[target_pos++] = (BYTE)((j - i) + 1);
1213
+ target[target_pos++] = source[i];
1214
+
1215
+ buffer_size = 0;
1216
+ } else {
1217
+ for (int k = 0; k < (j - i) + 1; ++k) {
1218
+ buffer[buffer_size++] = source[i + k];
1219
+
1220
+ if (buffer_size == 254) {
1221
+ // write what we have
1222
+
1223
+ target[target_pos++] = RLE_COMMAND;
1224
+ target[target_pos++] = (BYTE)buffer_size;
1225
+ memcpy(target + target_pos, buffer, buffer_size);
1226
+
1227
+ // prepare for next run
1228
+
1229
+ target_pos += buffer_size;
1230
+ buffer_size = 0;
1231
+ }
1232
+ }
1233
+ }
1234
+
1235
+ i = j;
1236
+ } else {
1237
+ buffer[buffer_size++] = source[i];
1238
+ }
1239
+
1240
+ // write the buffer if it's full
1241
+
1242
+ if (buffer_size == 254) {
1243
+ target[target_pos++] = RLE_COMMAND;
1244
+ target[target_pos++] = (BYTE)buffer_size;
1245
+ memcpy(target + target_pos, buffer, buffer_size);
1246
+
1247
+ // prepare for next run
1248
+
1249
+ target_pos += buffer_size;
1250
+ buffer_size = 0;
1251
+ }
1252
+ }
1253
+
1254
+ // write the last bytes
1255
+
1256
+ switch(buffer_size) {
1257
+ case 0 :
1258
+ break;
1259
+
1260
+ case RLE_DELTA :
1261
+ target[target_pos++] = 1;
1262
+ target[target_pos++] = buffer[0];
1263
+ target[target_pos++] = 1;
1264
+ target[target_pos++] = buffer[1];
1265
+ break;
1266
+
1267
+ case RLE_ENDOFBITMAP :
1268
+ target[target_pos++] = (BYTE)buffer_size;
1269
+ target[target_pos++] = buffer[0];
1270
+ break;
1271
+
1272
+ default :
1273
+ target[target_pos++] = RLE_COMMAND;
1274
+ target[target_pos++] = (BYTE)buffer_size;
1275
+ memcpy(target + target_pos, buffer, buffer_size);
1276
+
1277
+ // prepare for next run
1278
+
1279
+ target_pos += buffer_size;
1280
+
1281
+ if ((buffer_size & 1) == 1)
1282
+ target_pos++;
1283
+
1284
+ break;
1285
+ }
1286
+
1287
+ // write the END_OF_LINE marker
1288
+
1289
+ target[target_pos++] = RLE_COMMAND;
1290
+ target[target_pos++] = RLE_ENDOFLINE;
1291
+
1292
+ // return the written size
1293
+
1294
+ return target_pos;
1295
+ }
1296
+
1297
+ static BOOL DLL_CALLCONV
1298
+ Save(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data) {
1299
+ if ((dib != NULL) && (handle != NULL)) {
1300
+ // write the file header
1301
+
1302
+ BITMAPFILEHEADER bitmapfileheader;
1303
+ bitmapfileheader.bfType = 0x4D42;
1304
+ bitmapfileheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + FreeImage_GetColorsUsed(dib) * sizeof(RGBQUAD);
1305
+ bitmapfileheader.bfSize = bitmapfileheader.bfOffBits + FreeImage_GetHeight(dib) * FreeImage_GetPitch(dib);
1306
+ bitmapfileheader.bfReserved1 = 0;
1307
+ bitmapfileheader.bfReserved2 = 0;
1308
+
1309
+ // take care of the bit fields data of any
1310
+
1311
+ bool bit_fields = (FreeImage_GetBPP(dib) == 16);
1312
+
1313
+ if (bit_fields) {
1314
+ bitmapfileheader.bfSize += 3 * sizeof(DWORD);
1315
+ bitmapfileheader.bfOffBits += 3 * sizeof(DWORD);
1316
+ }
1317
+
1318
+ #ifdef FREEIMAGE_BIGENDIAN
1319
+ SwapFileHeader(&bitmapfileheader);
1320
+ #endif
1321
+ if (io->write_proc(&bitmapfileheader, sizeof(BITMAPFILEHEADER), 1, handle) != 1)
1322
+ return FALSE;
1323
+
1324
+ // update the bitmap info header
1325
+
1326
+ BITMAPINFOHEADER bih;
1327
+ memcpy(&bih, FreeImage_GetInfoHeader(dib), sizeof(BITMAPINFOHEADER));
1328
+
1329
+ if (bit_fields)
1330
+ bih.biCompression = BI_BITFIELDS;
1331
+ else if ((bih.biBitCount == 8) && (flags & BMP_SAVE_RLE))
1332
+ bih.biCompression = BI_RLE8;
1333
+ else
1334
+ bih.biCompression = BI_RGB;
1335
+
1336
+ // write the bitmap info header
1337
+
1338
+ #ifdef FREEIMAGE_BIGENDIAN
1339
+ SwapInfoHeader(&bih);
1340
+ #endif
1341
+ if (io->write_proc(&bih, sizeof(BITMAPINFOHEADER), 1, handle) != 1)
1342
+ return FALSE;
1343
+
1344
+ // write the bit fields when we are dealing with a 16 bit BMP
1345
+
1346
+ if (bit_fields) {
1347
+ DWORD d;
1348
+
1349
+ d = FreeImage_GetRedMask(dib);
1350
+
1351
+ if (io->write_proc(&d, sizeof(DWORD), 1, handle) != 1)
1352
+ return FALSE;
1353
+
1354
+ d = FreeImage_GetGreenMask(dib);
1355
+
1356
+ if (io->write_proc(&d, sizeof(DWORD), 1, handle) != 1)
1357
+ return FALSE;
1358
+
1359
+ d = FreeImage_GetBlueMask(dib);
1360
+
1361
+ if (io->write_proc(&d, sizeof(DWORD), 1, handle) != 1)
1362
+ return FALSE;
1363
+ }
1364
+
1365
+ // write the palette
1366
+
1367
+ if (FreeImage_GetPalette(dib) != NULL) {
1368
+ RGBQUAD *pal = FreeImage_GetPalette(dib);
1369
+ FILE_BGRA bgra;
1370
+ for(unsigned i = 0; i < FreeImage_GetColorsUsed(dib); i++ ) {
1371
+ bgra.b = pal[i].rgbBlue;
1372
+ bgra.g = pal[i].rgbGreen;
1373
+ bgra.r = pal[i].rgbRed;
1374
+ bgra.a = pal[i].rgbReserved;
1375
+ if (io->write_proc(&bgra, sizeof(FILE_BGRA), 1, handle) != 1)
1376
+ return FALSE;
1377
+ }
1378
+ }
1379
+
1380
+ // write the bitmap data... if RLE compression is enable, use it
1381
+
1382
+ unsigned bpp = FreeImage_GetBPP(dib);
1383
+ if ((bpp == 8) && (flags & BMP_SAVE_RLE)) {
1384
+ BYTE *buffer = (BYTE*)malloc(FreeImage_GetPitch(dib) * 2 * sizeof(BYTE));
1385
+
1386
+ for (DWORD i = 0; i < FreeImage_GetHeight(dib); ++i) {
1387
+ int size = RLEEncodeLine(buffer, FreeImage_GetScanLine(dib, i), FreeImage_GetLine(dib));
1388
+
1389
+ if (io->write_proc(buffer, size, 1, handle) != 1) {
1390
+ free(buffer);
1391
+ return FALSE;
1392
+ }
1393
+ }
1394
+
1395
+ buffer[0] = RLE_COMMAND;
1396
+ buffer[1] = RLE_ENDOFBITMAP;
1397
+
1398
+ if (io->write_proc(buffer, 2, 1, handle) != 1) {
1399
+ free(buffer);
1400
+ return FALSE;
1401
+ }
1402
+
1403
+ free(buffer);
1404
+ #ifdef FREEIMAGE_BIGENDIAN
1405
+ } else if (bpp == 16) {
1406
+ int padding = FreeImage_GetPitch(dib) - FreeImage_GetWidth(dib) * sizeof(WORD);
1407
+ WORD pad = 0;
1408
+ WORD pixel;
1409
+ for(unsigned y = 0; y < FreeImage_GetHeight(dib); y++) {
1410
+ BYTE *line = FreeImage_GetScanLine(dib, y);
1411
+ for(unsigned x = 0; x < FreeImage_GetWidth(dib); x++) {
1412
+ pixel = ((WORD *)line)[x];
1413
+ SwapShort(&pixel);
1414
+ if (io->write_proc(&pixel, sizeof(WORD), 1, handle) != 1)
1415
+ return FALSE;
1416
+ }
1417
+ if(padding != 0) {
1418
+ if(io->write_proc(&pad, padding, 1, handle) != 1) {
1419
+ return FALSE;
1420
+ }
1421
+ }
1422
+ }
1423
+ #endif
1424
+ #if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_RGB
1425
+ } else if (bpp == 24) {
1426
+ int padding = FreeImage_GetPitch(dib) - FreeImage_GetWidth(dib) * sizeof(FILE_BGR);
1427
+ DWORD pad = 0;
1428
+ FILE_BGR bgr;
1429
+ for(unsigned y = 0; y < FreeImage_GetHeight(dib); y++) {
1430
+ BYTE *line = FreeImage_GetScanLine(dib, y);
1431
+ for(unsigned x = 0; x < FreeImage_GetWidth(dib); x++) {
1432
+ RGBTRIPLE *triple = ((RGBTRIPLE *)line)+x;
1433
+ bgr.b = triple->rgbtBlue;
1434
+ bgr.g = triple->rgbtGreen;
1435
+ bgr.r = triple->rgbtRed;
1436
+ if (io->write_proc(&bgr, sizeof(FILE_BGR), 1, handle) != 1)
1437
+ return FALSE;
1438
+ }
1439
+ if(padding != 0) {
1440
+ if(io->write_proc(&pad, padding, 1, handle) != 1) {
1441
+ return FALSE;
1442
+ }
1443
+ }
1444
+ }
1445
+ } else if (bpp == 32) {
1446
+ FILE_BGRA bgra;
1447
+ for(unsigned y = 0; y < FreeImage_GetHeight(dib); y++) {
1448
+ BYTE *line = FreeImage_GetScanLine(dib, y);
1449
+ for(unsigned x = 0; x < FreeImage_GetWidth(dib); x++) {
1450
+ RGBQUAD *quad = ((RGBQUAD *)line)+x;
1451
+ bgra.b = quad->rgbBlue;
1452
+ bgra.g = quad->rgbGreen;
1453
+ bgra.r = quad->rgbRed;
1454
+ bgra.a = quad->rgbReserved;
1455
+ if (io->write_proc(&bgra, sizeof(FILE_BGRA), 1, handle) != 1)
1456
+ return FALSE;
1457
+ }
1458
+ }
1459
+ #endif
1460
+ } else if (io->write_proc(FreeImage_GetBits(dib), FreeImage_GetHeight(dib) * FreeImage_GetPitch(dib), 1, handle) != 1) {
1461
+ return FALSE;
1462
+ }
1463
+
1464
+ return TRUE;
1465
+ } else {
1466
+ return FALSE;
1467
+ }
1468
+ }
1469
+
1470
+ // ==========================================================
1471
+ // Init
1472
+ // ==========================================================
1473
+
1474
+ void DLL_CALLCONV
1475
+ InitBMP(Plugin *plugin, int format_id) {
1476
+ s_format_id = format_id;
1477
+
1478
+ plugin->format_proc = Format;
1479
+ plugin->description_proc = Description;
1480
+ plugin->extension_proc = Extension;
1481
+ plugin->regexpr_proc = RegExpr;
1482
+ plugin->open_proc = NULL;
1483
+ plugin->close_proc = NULL;
1484
+ plugin->pagecount_proc = NULL;
1485
+ plugin->pagecapability_proc = NULL;
1486
+ plugin->load_proc = Load;
1487
+ plugin->save_proc = Save;
1488
+ plugin->validate_proc = Validate;
1489
+ plugin->mime_proc = MimeType;
1490
+ plugin->supports_export_bpp_proc = SupportsExportDepth;
1491
+ plugin->supports_export_type_proc = SupportsExportType;
1492
+ plugin->supports_icc_profiles_proc = NULL; // not implemented yet;
1493
+ plugin->supports_no_pixels_proc = SupportsNoPixels;
1494
+ }