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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +1 -0
- data/Rakefile +34 -0
- data/ext/rfreeimage/extconf.rb +35 -0
- data/ext/rfreeimage/rfi_main.c +389 -0
- data/lib/rfreeimage/image.rb +26 -0
- data/lib/rfreeimage/version.rb +3 -0
- data/lib/rfreeimage.rb +3 -0
- data/rfreeimage.gemspec +32 -0
- data/vendor/FreeImage/Makefile +34 -0
- data/vendor/FreeImage/Makefile.cygwin +74 -0
- data/vendor/FreeImage/Makefile.fip +84 -0
- data/vendor/FreeImage/Makefile.gnu +83 -0
- data/vendor/FreeImage/Makefile.iphone +96 -0
- data/vendor/FreeImage/Makefile.mingw +136 -0
- data/vendor/FreeImage/Makefile.osx +115 -0
- data/vendor/FreeImage/Makefile.solaris +66 -0
- data/vendor/FreeImage/Makefile.srcs +6 -0
- data/vendor/FreeImage/README.iphone +19 -0
- data/vendor/FreeImage/README.linux +50 -0
- data/vendor/FreeImage/README.minGW +236 -0
- data/vendor/FreeImage/README.osx +44 -0
- data/vendor/FreeImage/README.solaris +67 -0
- data/vendor/FreeImage/Source/CacheFile.h +92 -0
- data/vendor/FreeImage/Source/DeprecationManager/Deprecated.cpp +36 -0
- data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.cpp +103 -0
- data/vendor/FreeImage/Source/DeprecationManager/DeprecationMgr.h +83 -0
- data/vendor/FreeImage/Source/FreeImage/BitmapAccess.cpp +1573 -0
- data/vendor/FreeImage/Source/FreeImage/CacheFile.cpp +271 -0
- data/vendor/FreeImage/Source/FreeImage/ColorLookup.cpp +785 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion.cpp +551 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion16_555.cpp +209 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion16_565.cpp +204 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion24.cpp +252 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion32.cpp +345 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion4.cpp +246 -0
- data/vendor/FreeImage/Source/FreeImage/Conversion8.cpp +305 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionFloat.cpp +194 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionRGB16.cpp +144 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionRGBA16.cpp +147 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionRGBAF.cpp +250 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionRGBF.cpp +243 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionType.cpp +699 -0
- data/vendor/FreeImage/Source/FreeImage/ConversionUINT16.cpp +134 -0
- data/vendor/FreeImage/Source/FreeImage/FreeImage.cpp +226 -0
- data/vendor/FreeImage/Source/FreeImage/FreeImageC.c +22 -0
- data/vendor/FreeImage/Source/FreeImage/FreeImageIO.cpp +175 -0
- data/vendor/FreeImage/Source/FreeImage/GetType.cpp +92 -0
- data/vendor/FreeImage/Source/FreeImage/Halftoning.cpp +474 -0
- data/vendor/FreeImage/Source/FreeImage/J2KHelper.cpp +591 -0
- data/vendor/FreeImage/Source/FreeImage/J2KHelper.h +36 -0
- data/vendor/FreeImage/Source/FreeImage/LFPQuantizer.cpp +208 -0
- data/vendor/FreeImage/Source/FreeImage/MNGHelper.cpp +1320 -0
- data/vendor/FreeImage/Source/FreeImage/MemoryIO.cpp +237 -0
- data/vendor/FreeImage/Source/FreeImage/MultiPage.cpp +974 -0
- data/vendor/FreeImage/Source/FreeImage/NNQuantizer.cpp +507 -0
- data/vendor/FreeImage/Source/FreeImage/PSDParser.cpp +1057 -0
- data/vendor/FreeImage/Source/FreeImage/PSDParser.h +271 -0
- data/vendor/FreeImage/Source/FreeImage/PixelAccess.cpp +197 -0
- data/vendor/FreeImage/Source/FreeImage/Plugin.cpp +822 -0
- data/vendor/FreeImage/Source/FreeImage/PluginBMP.cpp +1494 -0
- data/vendor/FreeImage/Source/FreeImage/PluginCUT.cpp +240 -0
- data/vendor/FreeImage/Source/FreeImage/PluginDDS.cpp +655 -0
- data/vendor/FreeImage/Source/FreeImage/PluginEXR.cpp +773 -0
- data/vendor/FreeImage/Source/FreeImage/PluginG3.cpp +433 -0
- data/vendor/FreeImage/Source/FreeImage/PluginGIF.cpp +1407 -0
- data/vendor/FreeImage/Source/FreeImage/PluginHDR.cpp +722 -0
- data/vendor/FreeImage/Source/FreeImage/PluginICO.cpp +824 -0
- data/vendor/FreeImage/Source/FreeImage/PluginIFF.cpp +459 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJ2K.cpp +328 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJNG.cpp +162 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJP2.cpp +328 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJPEG.cpp +1706 -0
- data/vendor/FreeImage/Source/FreeImage/PluginJXR.cpp +1475 -0
- data/vendor/FreeImage/Source/FreeImage/PluginKOALA.cpp +243 -0
- data/vendor/FreeImage/Source/FreeImage/PluginMNG.cpp +153 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPCD.cpp +251 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPCX.cpp +659 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPFM.cpp +409 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPICT.cpp +1343 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPNG.cpp +1115 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPNM.cpp +838 -0
- data/vendor/FreeImage/Source/FreeImage/PluginPSD.cpp +131 -0
- data/vendor/FreeImage/Source/FreeImage/PluginRAS.cpp +512 -0
- data/vendor/FreeImage/Source/FreeImage/PluginRAW.cpp +793 -0
- data/vendor/FreeImage/Source/FreeImage/PluginSGI.cpp +425 -0
- data/vendor/FreeImage/Source/FreeImage/PluginTARGA.cpp +1591 -0
- data/vendor/FreeImage/Source/FreeImage/PluginTIFF.cpp +2631 -0
- data/vendor/FreeImage/Source/FreeImage/PluginWBMP.cpp +372 -0
- data/vendor/FreeImage/Source/FreeImage/PluginWebP.cpp +698 -0
- data/vendor/FreeImage/Source/FreeImage/PluginXBM.cpp +399 -0
- data/vendor/FreeImage/Source/FreeImage/PluginXPM.cpp +487 -0
- data/vendor/FreeImage/Source/FreeImage/TIFFLogLuv.cpp +65 -0
- data/vendor/FreeImage/Source/FreeImage/ToneMapping.cpp +75 -0
- data/vendor/FreeImage/Source/FreeImage/WuQuantizer.cpp +559 -0
- data/vendor/FreeImage/Source/FreeImage/ZLibInterface.cpp +223 -0
- data/vendor/FreeImage/Source/FreeImage/tmoColorConvert.cpp +479 -0
- data/vendor/FreeImage/Source/FreeImage/tmoDrago03.cpp +295 -0
- data/vendor/FreeImage/Source/FreeImage/tmoFattal02.cpp +689 -0
- data/vendor/FreeImage/Source/FreeImage/tmoReinhard05.cpp +260 -0
- data/vendor/FreeImage/Source/FreeImage.h +1153 -0
- data/vendor/FreeImage/Source/FreeImageIO.h +63 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/BSplineRotate.cpp +730 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Background.cpp +895 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Channels.cpp +488 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/ClassicRotate.cpp +917 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Colors.cpp +967 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/CopyPaste.cpp +861 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Display.cpp +230 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Filters.h +287 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Flip.cpp +166 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/JPEGTransform.cpp +623 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/MultigridPoissonSolver.cpp +505 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Rescale.cpp +192 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Resize.cpp +2116 -0
- data/vendor/FreeImage/Source/FreeImageToolkit/Resize.h +196 -0
- data/vendor/FreeImage/Source/LibJPEG/ansi2knr.c +739 -0
- data/vendor/FreeImage/Source/LibJPEG/cderror.h +134 -0
- data/vendor/FreeImage/Source/LibJPEG/cdjpeg.c +181 -0
- data/vendor/FreeImage/Source/LibJPEG/cdjpeg.h +187 -0
- data/vendor/FreeImage/Source/LibJPEG/cjpeg.c +664 -0
- data/vendor/FreeImage/Source/LibJPEG/ckconfig.c +402 -0
- data/vendor/FreeImage/Source/LibJPEG/djpeg.c +617 -0
- data/vendor/FreeImage/Source/LibJPEG/example.c +433 -0
- data/vendor/FreeImage/Source/LibJPEG/jaricom.c +153 -0
- data/vendor/FreeImage/Source/LibJPEG/jcapimin.c +288 -0
- data/vendor/FreeImage/Source/LibJPEG/jcapistd.c +162 -0
- data/vendor/FreeImage/Source/LibJPEG/jcarith.c +944 -0
- data/vendor/FreeImage/Source/LibJPEG/jccoefct.c +454 -0
- data/vendor/FreeImage/Source/LibJPEG/jccolor.c +604 -0
- data/vendor/FreeImage/Source/LibJPEG/jcdctmgr.c +477 -0
- data/vendor/FreeImage/Source/LibJPEG/jchuff.c +1573 -0
- data/vendor/FreeImage/Source/LibJPEG/jcinit.c +84 -0
- data/vendor/FreeImage/Source/LibJPEG/jcmainct.c +297 -0
- data/vendor/FreeImage/Source/LibJPEG/jcmarker.c +719 -0
- data/vendor/FreeImage/Source/LibJPEG/jcmaster.c +856 -0
- data/vendor/FreeImage/Source/LibJPEG/jcomapi.c +106 -0
- data/vendor/FreeImage/Source/LibJPEG/jconfig.h +161 -0
- data/vendor/FreeImage/Source/LibJPEG/jcparam.c +675 -0
- data/vendor/FreeImage/Source/LibJPEG/jcprepct.c +358 -0
- data/vendor/FreeImage/Source/LibJPEG/jcsample.c +545 -0
- data/vendor/FreeImage/Source/LibJPEG/jctrans.c +385 -0
- data/vendor/FreeImage/Source/LibJPEG/jdapimin.c +399 -0
- data/vendor/FreeImage/Source/LibJPEG/jdapistd.c +276 -0
- data/vendor/FreeImage/Source/LibJPEG/jdarith.c +796 -0
- data/vendor/FreeImage/Source/LibJPEG/jdatadst.c +270 -0
- data/vendor/FreeImage/Source/LibJPEG/jdatasrc.c +275 -0
- data/vendor/FreeImage/Source/LibJPEG/jdcoefct.c +741 -0
- data/vendor/FreeImage/Source/LibJPEG/jdcolor.c +748 -0
- data/vendor/FreeImage/Source/LibJPEG/jdct.h +393 -0
- data/vendor/FreeImage/Source/LibJPEG/jddctmgr.c +384 -0
- data/vendor/FreeImage/Source/LibJPEG/jdhuff.c +1554 -0
- data/vendor/FreeImage/Source/LibJPEG/jdinput.c +662 -0
- data/vendor/FreeImage/Source/LibJPEG/jdmainct.c +513 -0
- data/vendor/FreeImage/Source/LibJPEG/jdmarker.c +1511 -0
- data/vendor/FreeImage/Source/LibJPEG/jdmaster.c +543 -0
- data/vendor/FreeImage/Source/LibJPEG/jdmerge.c +401 -0
- data/vendor/FreeImage/Source/LibJPEG/jdpostct.c +290 -0
- data/vendor/FreeImage/Source/LibJPEG/jdsample.c +361 -0
- data/vendor/FreeImage/Source/LibJPEG/jdtrans.c +140 -0
- data/vendor/FreeImage/Source/LibJPEG/jerror.c +253 -0
- data/vendor/FreeImage/Source/LibJPEG/jerror.h +304 -0
- data/vendor/FreeImage/Source/LibJPEG/jfdctflt.c +174 -0
- data/vendor/FreeImage/Source/LibJPEG/jfdctfst.c +230 -0
- data/vendor/FreeImage/Source/LibJPEG/jfdctint.c +4406 -0
- data/vendor/FreeImage/Source/LibJPEG/jidctflt.c +235 -0
- data/vendor/FreeImage/Source/LibJPEG/jidctfst.c +368 -0
- data/vendor/FreeImage/Source/LibJPEG/jidctint.c +5179 -0
- data/vendor/FreeImage/Source/LibJPEG/jinclude.h +91 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemansi.c +167 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemdos.c +638 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemmac.c +289 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemmgr.c +1119 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemname.c +276 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemnobs.c +109 -0
- data/vendor/FreeImage/Source/LibJPEG/jmemsys.h +198 -0
- data/vendor/FreeImage/Source/LibJPEG/jmorecfg.h +442 -0
- data/vendor/FreeImage/Source/LibJPEG/jpegint.h +426 -0
- data/vendor/FreeImage/Source/LibJPEG/jpeglib.h +1180 -0
- data/vendor/FreeImage/Source/LibJPEG/jpegtran.c +577 -0
- data/vendor/FreeImage/Source/LibJPEG/jquant1.c +857 -0
- data/vendor/FreeImage/Source/LibJPEG/jquant2.c +1311 -0
- data/vendor/FreeImage/Source/LibJPEG/jutils.c +227 -0
- data/vendor/FreeImage/Source/LibJPEG/jversion.h +14 -0
- data/vendor/FreeImage/Source/LibJPEG/rdbmp.c +480 -0
- data/vendor/FreeImage/Source/LibJPEG/rdcolmap.c +253 -0
- data/vendor/FreeImage/Source/LibJPEG/rdgif.c +38 -0
- data/vendor/FreeImage/Source/LibJPEG/rdjpgcom.c +515 -0
- data/vendor/FreeImage/Source/LibJPEG/rdppm.c +459 -0
- data/vendor/FreeImage/Source/LibJPEG/rdrle.c +387 -0
- data/vendor/FreeImage/Source/LibJPEG/rdswitch.c +365 -0
- data/vendor/FreeImage/Source/LibJPEG/rdtarga.c +500 -0
- data/vendor/FreeImage/Source/LibJPEG/transupp.c +1763 -0
- data/vendor/FreeImage/Source/LibJPEG/transupp.h +219 -0
- data/vendor/FreeImage/Source/LibJPEG/wrbmp.c +442 -0
- data/vendor/FreeImage/Source/LibJPEG/wrgif.c +399 -0
- data/vendor/FreeImage/Source/LibJPEG/wrjpgcom.c +583 -0
- data/vendor/FreeImage/Source/LibJPEG/wrppm.c +269 -0
- data/vendor/FreeImage/Source/LibJPEG/wrrle.c +305 -0
- data/vendor/FreeImage/Source/LibJPEG/wrtarga.c +253 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/guiddef.h +230 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmsal.h +757 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstring.h +342 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_adt.h +71 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_strict.h +1096 -0
- data/vendor/FreeImage/Source/LibJXR/common/include/wmspecstrings_undef.h +406 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/JXRTranscode.c +987 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/decode.c +200 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/decode.h +143 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/postprocess.c +288 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/segdec.c +1205 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/strInvTransform.c +1888 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/strPredQuantDec.c +539 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/strdec.c +3628 -0
- data/vendor/FreeImage/Source/LibJXR/image/decode/strdec_x86.c +1640 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/encode.c +144 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/encode.h +113 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/segenc.c +1186 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/strFwdTransform.c +1111 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/strPredQuantEnc.c +511 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/strenc.c +2370 -0
- data/vendor/FreeImage/Source/LibJXR/image/encode/strenc_x86.c +409 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/adapthuff.c +511 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/ansi.h +61 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/common.h +131 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/image.c +183 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimer.h +115 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/perfTimerANSI.c +274 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strPredQuant.c +306 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.c +85 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strTransform.h +50 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.c +1251 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/strcodec.h +681 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/windowsmediaphoto.h +515 -0
- data/vendor/FreeImage/Source/LibJXR/image/sys/xplatform_image.h +84 -0
- data/vendor/FreeImage/Source/LibJXR/image/x86/x86.h +58 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.c +930 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlue.h +636 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGlueJxr.c +2246 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRGluePFC.c +2338 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.c +905 -0
- data/vendor/FreeImage/Source/LibJXR/jxrgluelib/JXRMeta.h +258 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/bio.c +188 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/bio.h +128 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.c +239 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/cidx_manager.h +68 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/cio.c +644 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/cio.h +393 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/dwt.c +919 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/dwt.h +116 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/event.c +141 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/event.h +97 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/function_list.c +114 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/function_list.h +126 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/image.c +235 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/image.h +63 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/indexbox_manager.h +148 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/invert.c +289 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/invert.h +59 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/j2k.c +10238 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/j2k.h +838 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/jp2.c +2776 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/jp2.h +490 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/mct.c +319 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/mct.h +149 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/mqc.c +604 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/mqc.h +201 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.c +955 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/openjpeg.h +1475 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.c +59 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_clock.h +54 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_codec.h +160 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_config.h +9 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_config_private.h +16 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_includes.h +175 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_intmath.h +172 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_inttypes.h +43 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_malloc.h +180 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/opj_stdint.h +47 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/phix_manager.c +191 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/pi.c +1870 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/pi.h +182 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/ppix_manager.c +194 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/raw.c +89 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/raw.h +100 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t1.c +1751 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t1.h +157 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t1_generate_luts.c +276 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t1_luts.h +143 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t2.c +1334 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/t2.h +127 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tcd.c +2123 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tcd.h +348 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tgt.c +331 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tgt.h +140 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/thix_manager.c +134 -0
- data/vendor/FreeImage/Source/LibOpenJPEG/tpix_manager.c +185 -0
- data/vendor/FreeImage/Source/LibPNG/example.c +1061 -0
- data/vendor/FreeImage/Source/LibPNG/png.c +4493 -0
- data/vendor/FreeImage/Source/LibPNG/png.h +3282 -0
- data/vendor/FreeImage/Source/LibPNG/pngconf.h +644 -0
- data/vendor/FreeImage/Source/LibPNG/pngdebug.h +154 -0
- data/vendor/FreeImage/Source/LibPNG/pngerror.c +963 -0
- data/vendor/FreeImage/Source/LibPNG/pngget.c +1213 -0
- data/vendor/FreeImage/Source/LibPNG/pnginfo.h +260 -0
- data/vendor/FreeImage/Source/LibPNG/pnglibconf.h +218 -0
- data/vendor/FreeImage/Source/LibPNG/pngmem.c +281 -0
- data/vendor/FreeImage/Source/LibPNG/pngpread.c +1168 -0
- data/vendor/FreeImage/Source/LibPNG/pngpriv.h +1944 -0
- data/vendor/FreeImage/Source/LibPNG/pngread.c +4121 -0
- data/vendor/FreeImage/Source/LibPNG/pngrio.c +120 -0
- data/vendor/FreeImage/Source/LibPNG/pngrtran.c +4994 -0
- data/vendor/FreeImage/Source/LibPNG/pngrutil.c +4474 -0
- data/vendor/FreeImage/Source/LibPNG/pngset.c +1611 -0
- data/vendor/FreeImage/Source/LibPNG/pngstruct.h +489 -0
- data/vendor/FreeImage/Source/LibPNG/pngtest.c +2011 -0
- data/vendor/FreeImage/Source/LibPNG/pngtrans.c +849 -0
- data/vendor/FreeImage/Source/LibPNG/pngwio.c +168 -0
- data/vendor/FreeImage/Source/LibPNG/pngwrite.c +2455 -0
- data/vendor/FreeImage/Source/LibPNG/pngwtran.c +574 -0
- data/vendor/FreeImage/Source/LibPNG/pngwutil.c +3029 -0
- data/vendor/FreeImage/Source/LibRawLite/dcraw/dcraw.c +15462 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/aahd_demosaic.cpp +706 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/dcb_demosaicing.c +710 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_common.cpp +13593 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/dcraw_fileio.cpp +240 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/defines.h +167 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/demosaic_packs.cpp +99 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/dht_demosaic.cpp +873 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/libraw_internal_funcs.h +282 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/libraw_x3f.cpp +1919 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/var_defines.h +216 -0
- data/vendor/FreeImage/Source/LibRawLite/internal/wf_filtering.cpp +1950 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw.h +338 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_alloc.h +99 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_const.h +233 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_datastream.h +238 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_internal.h +225 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_types.h +442 -0
- data/vendor/FreeImage/Source/LibRawLite/libraw/libraw_version.h +62 -0
- data/vendor/FreeImage/Source/LibRawLite/src/libraw_c_api.cpp +230 -0
- data/vendor/FreeImage/Source/LibRawLite/src/libraw_cxx.cpp +4533 -0
- data/vendor/FreeImage/Source/LibRawLite/src/libraw_datastream.cpp +703 -0
- data/vendor/FreeImage/Source/LibTIFF4/mkg3states.c +451 -0
- data/vendor/FreeImage/Source/LibTIFF4/mkspans.c +82 -0
- data/vendor/FreeImage/Source/LibTIFF4/t4.h +292 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_aux.c +358 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_close.c +140 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_codec.c +166 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_color.c +287 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_compress.c +304 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_config.h +97 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_config.vc.h +74 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_config.wince.h +71 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dir.c +1700 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dir.h +308 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dirinfo.c +959 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dirread.c +5640 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dirwrite.c +2910 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_dumpmode.c +143 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_error.c +80 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_extension.c +118 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.c +1595 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_fax3.h +538 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_fax3sm.c +1260 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_flush.c +118 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_getimage.c +2890 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_jbig.c +213 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg.c +2354 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_jpeg_12.c +65 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_luv.c +1683 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_lzma.c +495 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_lzw.c +1169 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_next.c +181 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_ojpeg.c +2501 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_open.c +725 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_packbits.c +300 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_pixarlog.c +1442 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_predict.c +764 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_predict.h +77 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_print.c +716 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_read.c +1086 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_strip.c +383 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_swab.c +310 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_thunder.c +207 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_tile.c +299 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_unix.c +325 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_version.c +40 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_vms.c +603 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_warning.c +81 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_win32.c +443 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_wince.c +293 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_write.c +771 -0
- data/vendor/FreeImage/Source/LibTIFF4/tif_zip.c +472 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiff.h +681 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffconf.h +170 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffconf.vc.h +160 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffconf.wince.h +121 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffio.h +557 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffiop.h +367 -0
- data/vendor/FreeImage/Source/LibTIFF4/tiffvers.h +9 -0
- data/vendor/FreeImage/Source/LibTIFF4/uvcode.h +180 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/alphai.h +55 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.alpha.c +167 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.buffer.c +249 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.frame.c +827 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.idec.c +857 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.io.c +640 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.quant.c +110 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.tree.c +525 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8.c +663 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.vp8l.c +1584 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/dec.webp.c +834 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/decode_vp8.h +185 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/vp8i.h +353 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/vp8li.h +136 -0
- data/vendor/FreeImage/Source/LibWebP/src/dec/webpi.h +120 -0
- data/vendor/FreeImage/Source/LibWebP/src/demux/demux.demux.c +957 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing.c +377 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_mips_dsp_r2.c +139 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.alpha_processing_sse2.c +296 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb.c +68 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_mips_dsp_r2.c +108 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.argb_sse2.c +62 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost.c +412 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips32.c +154 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_mips_dsp_r2.c +107 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cost_sse2.c +121 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.cpu.c +138 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec.c +760 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_clip_tables.c +366 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips32.c +585 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c +992 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_neon.c +1489 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.dec_sse2.c +1284 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc.c +788 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_avx2.c +24 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips32.c +670 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c +1510 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_neon.c +932 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.enc_sse2.c +940 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters.c +240 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c +404 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.filters_sse2.c +349 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.h +434 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless.c +1838 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips32.c +416 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c +921 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_neon.c +357 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.lossless_sse2.c +535 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler.c +115 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips32.c +192 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.rescaler_mips_dsp_r2.c +210 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling.c +252 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c +280 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_neon.c +267 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.upsampling_sse2.c +214 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv.c +166 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips32.c +100 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c +131 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/dsp.yuv_sse2.c +322 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/lossless.h +313 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/mips_macro.h +200 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/neon.h +82 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv.h +321 -0
- data/vendor/FreeImage/Source/LibWebP/src/dsp/yuv_tables_sse2.h +536 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/backward_references.h +202 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/cost.h +69 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.alpha.c +440 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.analysis.c +501 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.backward_references.c +1076 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.config.c +163 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.cost.c +355 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.filter.c +296 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.frame.c +850 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.histogram.c +897 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.iterator.c +456 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.near_lossless.c +160 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture.c +290 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_csp.c +1100 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_psnr.c +150 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_rescale.c +285 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.picture_tools.c +206 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.quant.c +1191 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.syntax.c +383 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.token.c +285 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.tree.c +504 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.vp8l.c +1437 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/enc.webpenc.c +379 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/histogram.h +114 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/vp8enci.h +551 -0
- data/vendor/FreeImage/Source/LibWebP/src/enc/vp8li.h +78 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/mux.anim_encode.c +1241 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxedit.c +696 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxinternal.c +551 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/mux.muxread.c +544 -0
- data/vendor/FreeImage/Source/LibWebP/src/mux/muxi.h +232 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader.h +168 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/bit_reader_inl.h +172 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/bit_writer.h +120 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/color_cache.h +74 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/endian_inl.h +100 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/filters.h +32 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/huffman.h +67 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/huffman_encode.h +60 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels.h +36 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/quant_levels_dec.h +35 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/random.h +63 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/rescaler.h +78 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/thread.h +93 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_reader.c +208 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.bit_writer.c +308 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.color_cache.c +49 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.filters.c +76 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.h +121 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman.c +205 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.huffman_encode.c +417 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels.c +140 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.quant_levels_dec.c +279 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.random.c +43 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.rescaler.c +82 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.thread.c +309 -0
- data/vendor/FreeImage/Source/LibWebP/src/utils/utils.utils.c +211 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/decode.h +493 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/demux.h +224 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/encode.h +515 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/format_constants.h +88 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/mux.h +507 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/mux_types.h +97 -0
- data/vendor/FreeImage/Source/LibWebP/src/webp/types.h +52 -0
- data/vendor/FreeImage/Source/MapIntrospector.h +212 -0
- data/vendor/FreeImage/Source/Metadata/Exif.cpp +1253 -0
- data/vendor/FreeImage/Source/Metadata/FIRational.cpp +176 -0
- data/vendor/FreeImage/Source/Metadata/FIRational.h +108 -0
- data/vendor/FreeImage/Source/Metadata/FreeImageTag.cpp +353 -0
- data/vendor/FreeImage/Source/Metadata/FreeImageTag.h +500 -0
- data/vendor/FreeImage/Source/Metadata/IPTC.cpp +342 -0
- data/vendor/FreeImage/Source/Metadata/TagConversion.cpp +1094 -0
- data/vendor/FreeImage/Source/Metadata/TagLib.cpp +1618 -0
- data/vendor/FreeImage/Source/Metadata/XTIFF.cpp +766 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/eLut.cpp +114 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/eLut.h +71 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/half.cpp +310 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/half.h +757 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/halfExport.h +27 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/halfFunction.h +179 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/halfLimits.h +102 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.cpp +164 -0
- data/vendor/FreeImage/Source/OpenEXR/Half/toFloat.h +16391 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/Iex.h +60 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.cpp +156 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexBaseExc.h +264 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexErrnoExc.h +208 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexExport.h +51 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexForward.h +229 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexMacros.h +170 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexMathExc.h +57 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexNamespace.h +112 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.cpp +873 -0
- data/vendor/FreeImage/Source/OpenEXR/Iex/IexThrowErrnoExc.h +97 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.cpp +113 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFloatExc.h +146 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.cpp +530 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathFpu.h +91 -0
- data/vendor/FreeImage/Source/OpenEXR/IexMath/IexMathIeeeExc.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmBaseConfig.h +61 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.cpp +633 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAcesFile.h +324 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfArray.h +285 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.cpp +158 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAttribute.h +407 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfAutoArray.h +95 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.cpp +1072 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfB44Compressor.h +118 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.cpp +111 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfBoxAttribute.h +87 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.cpp +1438 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCRgbaFile.h +555 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.cpp +322 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelList.h +436 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.cpp +150 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChannelListAttribute.h +74 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCheckedArithmetic.h +163 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.cpp +151 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticities.h +131 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.cpp +87 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfChromaticitiesAttribute.h +73 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.cpp +591 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompositeDeepScanLine.h +142 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompression.h +84 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.cpp +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressionAttribute.h +64 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.cpp +226 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfCompressor.h +265 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.cpp +143 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfConvert.h +107 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.cpp +110 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepCompositing.h +132 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.cpp +230 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepFrameBuffer.h +339 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageState.h +96 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.cpp +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepImageStateAttribute.h +68 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.cpp +2025 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputFile.h +276 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.cpp +149 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineInputPart.h +181 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.cpp +1552 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputFile.h +244 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.cpp +107 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepScanLineOutputPart.h +168 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.cpp +1979 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputFile.h +437 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.cpp +273 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledInputPart.h +362 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.cpp +2055 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputFile.h +475 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.cpp +250 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDeepTiledOutputPart.h +394 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.cpp +57 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDoubleAttribute.h +59 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.cpp +3424 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressor.h +210 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfDwaCompressorSimd.h +2145 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.cpp +335 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmap.h +336 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.cpp +76 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfEnvmapAttribute.h +68 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfExport.h +46 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.cpp +768 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFastHuf.h +148 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.cpp +57 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatAttribute.h +58 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.cpp +84 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFloatVectorAttribute.h +76 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfForward.h +127 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.cpp +228 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFrameBuffer.h +386 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.cpp +76 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfFramesPerSecond.h +94 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.cpp +76 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericInputFile.h +58 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.cpp +112 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfGenericOutputFile.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.cpp +1283 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHeader.h +699 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.cpp +1114 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfHuf.h +82 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.cpp +110 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIO.h +255 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.cpp +895 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputFile.h +240 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.cpp +114 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPart.h +84 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.cpp +51 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputPartData.h +69 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInputStreamMutex.h +68 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfInt64.h +56 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.cpp +57 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfIntAttribute.h +58 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.cpp +217 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCode.h +167 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.cpp +99 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfKeyCodeAttribute.h +73 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrder.h +69 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.cpp +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLineOrderAttribute.h +72 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.cpp +178 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfLut.h +188 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.cpp +263 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMatrixAttribute.h +83 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.cpp +1872 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMisc.h +466 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.cpp +783 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartInputFile.h +128 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.cpp +519 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiPartOutputFile.h +118 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.cpp +435 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfMultiView.h +187 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfName.h +150 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfNamespace.h +115 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.cpp +126 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOpaqueAttribute.h +110 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOptimizedPixelReading.h +646 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.cpp +1378 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputFile.h +263 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.cpp +105 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPart.h +77 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.cpp +52 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputPartData.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfOutputStreamMutex.h +70 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartHelper.h +262 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.cpp +63 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPartType.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPixelType.h +67 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.cpp +667 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPizCompressor.h +117 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.cpp +104 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImage.h +135 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.cpp +103 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPreviewImageAttribute.h +70 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.cpp +553 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfPxr24Compressor.h +109 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.cpp +127 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRational.h +98 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.cpp +74 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRationalAttribute.h +69 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgba.h +109 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.cpp +1405 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaFile.h +346 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.cpp +497 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRgbaYca.h +259 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.cpp +157 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRle.h +63 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.cpp +220 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfRleCompressor.h +80 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.cpp +1702 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfScanLineInputFile.h +210 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSimd.h +59 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.cpp +125 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStandardAttributes.h +382 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.cpp +242 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStdIO.h +160 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.cpp +80 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringAttribute.h +71 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.cpp +100 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfStringVectorAttribute.h +74 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.cpp +129 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfSystemSpecific.h +172 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.cpp +216 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTestFile.h +97 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.cpp +62 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfThreading.h +95 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescription.h +107 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.cpp +86 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileDescriptionAttribute.h +72 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.cpp +552 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTileOffsets.h +125 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.cpp +1533 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputFile.h +401 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.cpp +208 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledInputPart.h +100 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.cpp +389 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledMisc.h +106 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.cpp +1841 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputFile.h +495 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.cpp +228 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledOutputPart.h +105 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.cpp +1163 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTiledRgbaFile.h +482 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.cpp +431 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCode.h +242 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.cpp +79 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfTimeCodeAttribute.h +74 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.cpp +217 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVecAttribute.h +100 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.cpp +60 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfVersion.h +136 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.cpp +391 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfWav.h +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfXdr.h +927 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.cpp +196 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZip.h +78 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.cpp +127 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/ImfZipCompressor.h +89 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.cpp +136 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/b44ExpLogTable.h +16396 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.cpp +573 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmImf/dwaLookups.h +98334 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.cpp +80 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThread.h +143 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadExport.h +46 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadForward.h +52 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.cpp +59 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutex.h +160 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexPosix.cpp +85 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadMutexWin32.cpp +79 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadNamespace.h +114 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.cpp +483 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPool.h +160 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadPosix.cpp +98 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.cpp +60 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphore.h +112 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosix.cpp +106 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphorePosixCompat.cpp +155 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadSemaphoreWin32.cpp +153 -0
- data/vendor/FreeImage/Source/OpenEXR/IlmThread/IlmThreadWin32.cpp +100 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.cpp +37 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBox.h +849 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathBoxAlgo.h +1016 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColor.h +736 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.cpp +178 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathColorAlgo.h +257 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathEuler.h +926 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExc.h +73 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathExport.h +46 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathForward.h +72 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrame.h +192 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustum.h +741 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFrustumTest.h +417 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.cpp +181 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathFun.h +269 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGL.h +166 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathGLU.h +54 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathHalfLimits.h +68 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInt64.h +62 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathInterval.h +226 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLimits.h +268 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLine.h +185 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathLineAlgo.h +288 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMath.h +208 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrix.h +3441 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.cpp +1252 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathMatrixAlgo.h +1425 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathNamespace.h +115 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlane.h +257 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathPlatform.h +112 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathQuat.h +964 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.cpp +194 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRandom.h +401 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathRoots.h +219 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.cpp +54 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathShear.h +656 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathSphere.h +177 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.cpp +583 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVec.h +2227 -0
- data/vendor/FreeImage/Source/OpenEXR/Imath/ImathVecAlgo.h +147 -0
- data/vendor/FreeImage/Source/OpenEXR/OpenEXRConfig.h +72 -0
- data/vendor/FreeImage/Source/Plugin.h +144 -0
- data/vendor/FreeImage/Source/Quantizers.h +354 -0
- data/vendor/FreeImage/Source/ToneMapping.h +44 -0
- data/vendor/FreeImage/Source/Utilities.h +516 -0
- data/vendor/FreeImage/Source/ZLib/adler32.c +179 -0
- data/vendor/FreeImage/Source/ZLib/compress.c +80 -0
- data/vendor/FreeImage/Source/ZLib/crc32.c +425 -0
- data/vendor/FreeImage/Source/ZLib/crc32.h +441 -0
- data/vendor/FreeImage/Source/ZLib/deflate.c +1967 -0
- data/vendor/FreeImage/Source/ZLib/deflate.h +346 -0
- data/vendor/FreeImage/Source/ZLib/gzclose.c +25 -0
- data/vendor/FreeImage/Source/ZLib/gzguts.h +209 -0
- data/vendor/FreeImage/Source/ZLib/gzlib.c +634 -0
- data/vendor/FreeImage/Source/ZLib/gzread.c +594 -0
- data/vendor/FreeImage/Source/ZLib/gzwrite.c +577 -0
- data/vendor/FreeImage/Source/ZLib/infback.c +640 -0
- data/vendor/FreeImage/Source/ZLib/inffast.c +340 -0
- data/vendor/FreeImage/Source/ZLib/inffast.h +11 -0
- data/vendor/FreeImage/Source/ZLib/inffixed.h +94 -0
- data/vendor/FreeImage/Source/ZLib/inflate.c +1512 -0
- data/vendor/FreeImage/Source/ZLib/inflate.h +122 -0
- data/vendor/FreeImage/Source/ZLib/inftrees.c +306 -0
- data/vendor/FreeImage/Source/ZLib/inftrees.h +62 -0
- data/vendor/FreeImage/Source/ZLib/trees.c +1226 -0
- data/vendor/FreeImage/Source/ZLib/trees.h +128 -0
- data/vendor/FreeImage/Source/ZLib/uncompr.c +59 -0
- data/vendor/FreeImage/Source/ZLib/zconf.h +511 -0
- data/vendor/FreeImage/Source/ZLib/zlib.h +1768 -0
- data/vendor/FreeImage/Source/ZLib/zutil.c +324 -0
- data/vendor/FreeImage/Source/ZLib/zutil.h +253 -0
- 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
|
+
}
|