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,1115 @@
|
|
|
1
|
+
// ==========================================================
|
|
2
|
+
// PNG Loader and Writer
|
|
3
|
+
//
|
|
4
|
+
// Design and implementation by
|
|
5
|
+
// - Floris van den Berg (flvdberg@wxs.nl)
|
|
6
|
+
// - Herve Drolon (drolon@infonie.fr)
|
|
7
|
+
// - Detlev Vendt (detlev.vendt@brillit.de)
|
|
8
|
+
// - Aaron Shumate (trek@startreker.com)
|
|
9
|
+
// - Tanner Helland (tannerhelland@users.sf.net)
|
|
10
|
+
//
|
|
11
|
+
// This file is part of FreeImage 3
|
|
12
|
+
//
|
|
13
|
+
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
|
|
14
|
+
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
|
|
15
|
+
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
|
|
16
|
+
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
|
|
17
|
+
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
|
|
18
|
+
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
|
|
19
|
+
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
|
|
20
|
+
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
|
|
21
|
+
// THIS DISCLAIMER.
|
|
22
|
+
//
|
|
23
|
+
// Use at your own risk!
|
|
24
|
+
// ==========================================================
|
|
25
|
+
|
|
26
|
+
#ifdef _MSC_VER
|
|
27
|
+
#pragma warning (disable : 4786) // identifier was truncated to 'number' characters
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
#include "FreeImage.h"
|
|
31
|
+
#include "Utilities.h"
|
|
32
|
+
|
|
33
|
+
#include "../Metadata/FreeImageTag.h"
|
|
34
|
+
|
|
35
|
+
// ----------------------------------------------------------
|
|
36
|
+
|
|
37
|
+
#define PNG_BYTES_TO_CHECK 8
|
|
38
|
+
|
|
39
|
+
#undef PNG_Z_DEFAULT_COMPRESSION // already used in ../LibPNG/pnglibconf.h
|
|
40
|
+
|
|
41
|
+
// ----------------------------------------------------------
|
|
42
|
+
|
|
43
|
+
#include "../ZLib/zlib.h"
|
|
44
|
+
#include "../LibPNG/png.h"
|
|
45
|
+
|
|
46
|
+
// ----------------------------------------------------------
|
|
47
|
+
|
|
48
|
+
typedef struct {
|
|
49
|
+
FreeImageIO *s_io;
|
|
50
|
+
fi_handle s_handle;
|
|
51
|
+
} fi_ioStructure, *pfi_ioStructure;
|
|
52
|
+
|
|
53
|
+
// ==========================================================
|
|
54
|
+
// libpng interface
|
|
55
|
+
// ==========================================================
|
|
56
|
+
|
|
57
|
+
static void
|
|
58
|
+
_ReadProc(png_structp png_ptr, unsigned char *data, png_size_t size) {
|
|
59
|
+
pfi_ioStructure pfio = (pfi_ioStructure)png_get_io_ptr(png_ptr);
|
|
60
|
+
unsigned n = pfio->s_io->read_proc(data, (unsigned int)size, 1, pfio->s_handle);
|
|
61
|
+
if(size && (n == 0)) {
|
|
62
|
+
throw "Read error: invalid or corrupted PNG file";
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
static void
|
|
67
|
+
_WriteProc(png_structp png_ptr, unsigned char *data, png_size_t size) {
|
|
68
|
+
pfi_ioStructure pfio = (pfi_ioStructure)png_get_io_ptr(png_ptr);
|
|
69
|
+
pfio->s_io->write_proc(data, (unsigned int)size, 1, pfio->s_handle);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
static void
|
|
73
|
+
_FlushProc(png_structp png_ptr) {
|
|
74
|
+
(png_structp)png_ptr;
|
|
75
|
+
// empty flush implementation
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
static void
|
|
79
|
+
error_handler(png_structp png_ptr, const char *error) {
|
|
80
|
+
(png_structp)png_ptr;
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// in FreeImage warnings disabled
|
|
85
|
+
|
|
86
|
+
static void
|
|
87
|
+
warning_handler(png_structp png_ptr, const char *warning) {
|
|
88
|
+
(png_structp)png_ptr;
|
|
89
|
+
(char*)warning;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ==========================================================
|
|
93
|
+
// Metadata routines
|
|
94
|
+
// ==========================================================
|
|
95
|
+
|
|
96
|
+
static BOOL
|
|
97
|
+
ReadMetadata(png_structp png_ptr, png_infop info_ptr, FIBITMAP *dib) {
|
|
98
|
+
// XMP keyword
|
|
99
|
+
const char *g_png_xmp_keyword = "XML:com.adobe.xmp";
|
|
100
|
+
|
|
101
|
+
FITAG *tag = NULL;
|
|
102
|
+
png_textp text_ptr = NULL;
|
|
103
|
+
png_timep mod_time = NULL;
|
|
104
|
+
int num_text = 0;
|
|
105
|
+
|
|
106
|
+
// iTXt/tEXt/zTXt chuncks
|
|
107
|
+
if(png_get_text(png_ptr, info_ptr, &text_ptr, &num_text) > 0) {
|
|
108
|
+
for(int i = 0; i < num_text; i++) {
|
|
109
|
+
// create a tag
|
|
110
|
+
tag = FreeImage_CreateTag();
|
|
111
|
+
if(!tag) return FALSE;
|
|
112
|
+
|
|
113
|
+
DWORD tag_length = (DWORD) MAX(text_ptr[i].text_length, text_ptr[i].itxt_length);
|
|
114
|
+
|
|
115
|
+
FreeImage_SetTagLength(tag, tag_length);
|
|
116
|
+
FreeImage_SetTagCount(tag, tag_length);
|
|
117
|
+
FreeImage_SetTagType(tag, FIDT_ASCII);
|
|
118
|
+
FreeImage_SetTagValue(tag, text_ptr[i].text);
|
|
119
|
+
|
|
120
|
+
if(strcmp(text_ptr[i].key, g_png_xmp_keyword) == 0) {
|
|
121
|
+
// store the tag as XMP
|
|
122
|
+
FreeImage_SetTagKey(tag, g_TagLib_XMPFieldName);
|
|
123
|
+
FreeImage_SetMetadata(FIMD_XMP, dib, FreeImage_GetTagKey(tag), tag);
|
|
124
|
+
} else {
|
|
125
|
+
// store the tag as a comment
|
|
126
|
+
FreeImage_SetTagKey(tag, text_ptr[i].key);
|
|
127
|
+
FreeImage_SetMetadata(FIMD_COMMENTS, dib, FreeImage_GetTagKey(tag), tag);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// destroy the tag
|
|
131
|
+
FreeImage_DeleteTag(tag);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// timestamp chunk
|
|
136
|
+
if(png_get_tIME(png_ptr, info_ptr, &mod_time)) {
|
|
137
|
+
char timestamp[32];
|
|
138
|
+
// create a tag
|
|
139
|
+
tag = FreeImage_CreateTag();
|
|
140
|
+
if(!tag) return FALSE;
|
|
141
|
+
|
|
142
|
+
// convert as 'yyyy:MM:dd hh:mm:ss'
|
|
143
|
+
sprintf(timestamp, "%4d:%02d:%02d %2d:%02d:%02d", mod_time->year, mod_time->month, mod_time->day, mod_time->hour, mod_time->minute, mod_time->second);
|
|
144
|
+
|
|
145
|
+
DWORD tag_length = (DWORD)strlen(timestamp) + 1;
|
|
146
|
+
FreeImage_SetTagLength(tag, tag_length);
|
|
147
|
+
FreeImage_SetTagCount(tag, tag_length);
|
|
148
|
+
FreeImage_SetTagType(tag, FIDT_ASCII);
|
|
149
|
+
FreeImage_SetTagID(tag, TAG_DATETIME);
|
|
150
|
+
FreeImage_SetTagValue(tag, timestamp);
|
|
151
|
+
|
|
152
|
+
// store the tag as Exif-TIFF
|
|
153
|
+
FreeImage_SetTagKey(tag, "DateTime");
|
|
154
|
+
FreeImage_SetMetadata(FIMD_EXIF_MAIN, dib, FreeImage_GetTagKey(tag), tag);
|
|
155
|
+
|
|
156
|
+
// destroy the tag
|
|
157
|
+
FreeImage_DeleteTag(tag);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return TRUE;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
static BOOL
|
|
164
|
+
WriteMetadata(png_structp png_ptr, png_infop info_ptr, FIBITMAP *dib) {
|
|
165
|
+
// XMP keyword
|
|
166
|
+
const char *g_png_xmp_keyword = "XML:com.adobe.xmp";
|
|
167
|
+
|
|
168
|
+
FITAG *tag = NULL;
|
|
169
|
+
FIMETADATA *mdhandle = NULL;
|
|
170
|
+
BOOL bResult = TRUE;
|
|
171
|
+
|
|
172
|
+
png_text text_metadata;
|
|
173
|
+
png_time mod_time;
|
|
174
|
+
|
|
175
|
+
// set the 'Comments' metadata as iTXt chuncks
|
|
176
|
+
|
|
177
|
+
mdhandle = FreeImage_FindFirstMetadata(FIMD_COMMENTS, dib, &tag);
|
|
178
|
+
|
|
179
|
+
if(mdhandle) {
|
|
180
|
+
do {
|
|
181
|
+
memset(&text_metadata, 0, sizeof(png_text));
|
|
182
|
+
text_metadata.compression = 1; // iTXt, none
|
|
183
|
+
text_metadata.key = (char*)FreeImage_GetTagKey(tag); // keyword, 1-79 character description of "text"
|
|
184
|
+
text_metadata.text = (char*)FreeImage_GetTagValue(tag); // comment, may be an empty string (ie "")
|
|
185
|
+
text_metadata.text_length = FreeImage_GetTagLength(tag);// length of the text string
|
|
186
|
+
text_metadata.itxt_length = FreeImage_GetTagLength(tag);// length of the itxt string
|
|
187
|
+
text_metadata.lang = 0; // language code, 0-79 characters or a NULL pointer
|
|
188
|
+
text_metadata.lang_key = 0; // keyword translated UTF-8 string, 0 or more chars or a NULL pointer
|
|
189
|
+
|
|
190
|
+
// set the tag
|
|
191
|
+
png_set_text(png_ptr, info_ptr, &text_metadata, 1);
|
|
192
|
+
|
|
193
|
+
} while(FreeImage_FindNextMetadata(mdhandle, &tag));
|
|
194
|
+
|
|
195
|
+
FreeImage_FindCloseMetadata(mdhandle);
|
|
196
|
+
bResult &= TRUE;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// set the 'XMP' metadata as iTXt chuncks
|
|
200
|
+
tag = NULL;
|
|
201
|
+
FreeImage_GetMetadata(FIMD_XMP, dib, g_TagLib_XMPFieldName, &tag);
|
|
202
|
+
if(tag && FreeImage_GetTagLength(tag)) {
|
|
203
|
+
memset(&text_metadata, 0, sizeof(png_text));
|
|
204
|
+
text_metadata.compression = 1; // iTXt, none
|
|
205
|
+
text_metadata.key = (char*)g_png_xmp_keyword; // keyword, 1-79 character description of "text"
|
|
206
|
+
text_metadata.text = (char*)FreeImage_GetTagValue(tag); // comment, may be an empty string (ie "")
|
|
207
|
+
text_metadata.text_length = FreeImage_GetTagLength(tag);// length of the text string
|
|
208
|
+
text_metadata.itxt_length = FreeImage_GetTagLength(tag);// length of the itxt string
|
|
209
|
+
text_metadata.lang = 0; // language code, 0-79 characters or a NULL pointer
|
|
210
|
+
text_metadata.lang_key = 0; // keyword translated UTF-8 string, 0 or more chars or a NULL pointer
|
|
211
|
+
|
|
212
|
+
// set the tag
|
|
213
|
+
png_set_text(png_ptr, info_ptr, &text_metadata, 1);
|
|
214
|
+
bResult &= TRUE;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// set the Exif-TIFF 'DateTime' metadata as a tIME chunk
|
|
218
|
+
tag = NULL;
|
|
219
|
+
FreeImage_GetMetadata(FIMD_EXIF_MAIN, dib, "DateTime", &tag);
|
|
220
|
+
if(tag && FreeImage_GetTagLength(tag)) {
|
|
221
|
+
int year, month, day, hour, minute, second;
|
|
222
|
+
const char *value = (char*)FreeImage_GetTagValue(tag);
|
|
223
|
+
if(sscanf(value, "%4d:%02d:%02d %2d:%02d:%02d", &year, &month, &day, &hour, &minute, &second) == 6) {
|
|
224
|
+
mod_time.year = (png_uint_16)year;
|
|
225
|
+
mod_time.month = (png_byte)month;
|
|
226
|
+
mod_time.day = (png_byte)day;
|
|
227
|
+
mod_time.hour = (png_byte)hour;
|
|
228
|
+
mod_time.minute = (png_byte)minute;
|
|
229
|
+
mod_time.second = (png_byte)second;
|
|
230
|
+
png_set_tIME (png_ptr, info_ptr, &mod_time);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return bResult;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// ==========================================================
|
|
238
|
+
// Plugin Interface
|
|
239
|
+
// ==========================================================
|
|
240
|
+
|
|
241
|
+
static int s_format_id;
|
|
242
|
+
|
|
243
|
+
// ==========================================================
|
|
244
|
+
// Plugin Implementation
|
|
245
|
+
// ==========================================================
|
|
246
|
+
|
|
247
|
+
static const char * DLL_CALLCONV
|
|
248
|
+
Format() {
|
|
249
|
+
return "PNG";
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
static const char * DLL_CALLCONV
|
|
253
|
+
Description() {
|
|
254
|
+
return "Portable Network Graphics";
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
static const char * DLL_CALLCONV
|
|
258
|
+
Extension() {
|
|
259
|
+
return "png";
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
static const char * DLL_CALLCONV
|
|
263
|
+
RegExpr() {
|
|
264
|
+
return "^.PNG\r";
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
static const char * DLL_CALLCONV
|
|
268
|
+
MimeType() {
|
|
269
|
+
return "image/png";
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
static BOOL DLL_CALLCONV
|
|
273
|
+
Validate(FreeImageIO *io, fi_handle handle) {
|
|
274
|
+
BYTE png_signature[8] = { 137, 80, 78, 71, 13, 10, 26, 10 };
|
|
275
|
+
BYTE signature[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
|
276
|
+
|
|
277
|
+
io->read_proc(&signature, 1, 8, handle);
|
|
278
|
+
|
|
279
|
+
return (memcmp(png_signature, signature, 8) == 0);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
static BOOL DLL_CALLCONV
|
|
283
|
+
SupportsExportDepth(int depth) {
|
|
284
|
+
return (
|
|
285
|
+
(depth == 1) ||
|
|
286
|
+
(depth == 4) ||
|
|
287
|
+
(depth == 8) ||
|
|
288
|
+
(depth == 24) ||
|
|
289
|
+
(depth == 32)
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
static BOOL DLL_CALLCONV
|
|
294
|
+
SupportsExportType(FREE_IMAGE_TYPE type) {
|
|
295
|
+
return (
|
|
296
|
+
(type == FIT_BITMAP) ||
|
|
297
|
+
(type == FIT_UINT16) ||
|
|
298
|
+
(type == FIT_RGB16) ||
|
|
299
|
+
(type == FIT_RGBA16)
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
static BOOL DLL_CALLCONV
|
|
304
|
+
SupportsICCProfiles() {
|
|
305
|
+
return TRUE;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
static BOOL DLL_CALLCONV
|
|
309
|
+
SupportsNoPixels() {
|
|
310
|
+
return TRUE;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// --------------------------------------------------------------------------
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
Configure the decoder so that decoded pixels are compatible with a FREE_IMAGE_TYPE format.
|
|
317
|
+
Set conversion instructions as needed.
|
|
318
|
+
@param png_ptr PNG handle
|
|
319
|
+
@param info_ptr PNG info handle
|
|
320
|
+
@param flags Decoder flags
|
|
321
|
+
@param output_image_type Returned FreeImage converted image type
|
|
322
|
+
@return Returns TRUE if successful, returns FALSE otherwise
|
|
323
|
+
@see png_read_update_info
|
|
324
|
+
*/
|
|
325
|
+
static BOOL
|
|
326
|
+
ConfigureDecoder(png_structp png_ptr, png_infop info_ptr, int flags, FREE_IMAGE_TYPE *output_image_type) {
|
|
327
|
+
// get original image info
|
|
328
|
+
const int color_type = png_get_color_type(png_ptr, info_ptr);
|
|
329
|
+
const int bit_depth = png_get_bit_depth(png_ptr, info_ptr);
|
|
330
|
+
const int pixel_depth = bit_depth * png_get_channels(png_ptr, info_ptr);
|
|
331
|
+
|
|
332
|
+
FREE_IMAGE_TYPE image_type = FIT_BITMAP; // assume standard image type
|
|
333
|
+
|
|
334
|
+
// check for transparency table or single transparent color
|
|
335
|
+
BOOL bIsTransparent = png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) == PNG_INFO_tRNS ? TRUE : FALSE;
|
|
336
|
+
|
|
337
|
+
// check allowed combinations of colour type and bit depth
|
|
338
|
+
// then get converted FreeImage type
|
|
339
|
+
|
|
340
|
+
switch(color_type) {
|
|
341
|
+
case PNG_COLOR_TYPE_GRAY: // color type '0', bitdepth = 1, 2, 4, 8, 16
|
|
342
|
+
switch(bit_depth) {
|
|
343
|
+
case 1:
|
|
344
|
+
case 2:
|
|
345
|
+
case 4:
|
|
346
|
+
case 8:
|
|
347
|
+
// expand grayscale images to the full 8-bit from 2-bit/pixel
|
|
348
|
+
if (pixel_depth == 2) {
|
|
349
|
+
png_set_expand_gray_1_2_4_to_8(png_ptr);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
// if a tRNS chunk is provided, we must also expand the grayscale data to 8-bits,
|
|
353
|
+
// this allows us to make use of the transparency table with existing FreeImage methods
|
|
354
|
+
if (bIsTransparent && (pixel_depth < 8)) {
|
|
355
|
+
png_set_expand_gray_1_2_4_to_8(png_ptr);
|
|
356
|
+
}
|
|
357
|
+
break;
|
|
358
|
+
|
|
359
|
+
case 16:
|
|
360
|
+
image_type = (pixel_depth == 16) ? FIT_UINT16 : FIT_UNKNOWN;
|
|
361
|
+
|
|
362
|
+
// 16-bit grayscale images can contain a transparent value (shade)
|
|
363
|
+
// if found, expand the transparent value to a full alpha channel
|
|
364
|
+
if (bIsTransparent && (image_type != FIT_UNKNOWN)) {
|
|
365
|
+
// expand tRNS to a full alpha channel
|
|
366
|
+
png_set_tRNS_to_alpha(png_ptr);
|
|
367
|
+
|
|
368
|
+
// expand new 16-bit gray + 16-bit alpha to full 64-bit RGBA
|
|
369
|
+
png_set_gray_to_rgb(png_ptr);
|
|
370
|
+
|
|
371
|
+
image_type = FIT_RGBA16;
|
|
372
|
+
}
|
|
373
|
+
break;
|
|
374
|
+
|
|
375
|
+
default:
|
|
376
|
+
image_type = FIT_UNKNOWN;
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
break;
|
|
380
|
+
|
|
381
|
+
case PNG_COLOR_TYPE_RGB: // color type '2', bitdepth = 8, 16
|
|
382
|
+
switch(bit_depth) {
|
|
383
|
+
case 8:
|
|
384
|
+
image_type = (pixel_depth == 24) ? FIT_BITMAP : FIT_UNKNOWN;
|
|
385
|
+
break;
|
|
386
|
+
case 16:
|
|
387
|
+
image_type = (pixel_depth == 48) ? FIT_RGB16 : FIT_UNKNOWN;
|
|
388
|
+
break;
|
|
389
|
+
default:
|
|
390
|
+
image_type = FIT_UNKNOWN;
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
// sometimes, 24- or 48-bit images may contain transparency information
|
|
394
|
+
// check for this use case and convert to an alpha-compatible format
|
|
395
|
+
if (bIsTransparent && (image_type != FIT_UNKNOWN)) {
|
|
396
|
+
// if the image is 24-bit RGB, mark it as 32-bit; if it is 48-bit, mark it as 64-bit
|
|
397
|
+
image_type = (pixel_depth == 24) ? FIT_BITMAP : (pixel_depth == 48) ? FIT_RGBA16 : FIT_UNKNOWN;
|
|
398
|
+
// expand tRNS chunk to alpha channel
|
|
399
|
+
png_set_tRNS_to_alpha(png_ptr);
|
|
400
|
+
}
|
|
401
|
+
break;
|
|
402
|
+
|
|
403
|
+
case PNG_COLOR_TYPE_PALETTE: // color type '3', bitdepth = 1, 2, 4, 8
|
|
404
|
+
switch(bit_depth) {
|
|
405
|
+
case 1:
|
|
406
|
+
case 2:
|
|
407
|
+
case 4:
|
|
408
|
+
case 8:
|
|
409
|
+
// expand palette images to the full 8 bits from 2 bits/pixel
|
|
410
|
+
if (pixel_depth == 2) {
|
|
411
|
+
png_set_packing(png_ptr);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
// if a tRNS chunk is provided, we must also expand the palletized data to 8-bits,
|
|
415
|
+
// this allows us to make use of the transparency table with existing FreeImage methods
|
|
416
|
+
if (bIsTransparent && (pixel_depth < 8)) {
|
|
417
|
+
png_set_packing(png_ptr);
|
|
418
|
+
}
|
|
419
|
+
break;
|
|
420
|
+
|
|
421
|
+
default:
|
|
422
|
+
image_type = FIT_UNKNOWN;
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
break;
|
|
426
|
+
|
|
427
|
+
case PNG_COLOR_TYPE_GRAY_ALPHA: // color type '4', bitdepth = 8, 16
|
|
428
|
+
switch(bit_depth) {
|
|
429
|
+
case 8:
|
|
430
|
+
// 8-bit grayscale + 8-bit alpha => convert to 32-bit RGBA
|
|
431
|
+
image_type = (pixel_depth == 16) ? FIT_BITMAP : FIT_UNKNOWN;
|
|
432
|
+
break;
|
|
433
|
+
case 16:
|
|
434
|
+
// 16-bit grayscale + 16-bit alpha => convert to 64-bit RGBA
|
|
435
|
+
image_type = (pixel_depth == 32) ? FIT_RGBA16 : FIT_UNKNOWN;
|
|
436
|
+
break;
|
|
437
|
+
default:
|
|
438
|
+
image_type = FIT_UNKNOWN;
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
// expand 8-bit greyscale + 8-bit alpha to 32-bit
|
|
442
|
+
// expand 16-bit greyscale + 16-bit alpha to 64-bit
|
|
443
|
+
png_set_gray_to_rgb(png_ptr);
|
|
444
|
+
break;
|
|
445
|
+
|
|
446
|
+
case PNG_COLOR_TYPE_RGB_ALPHA: // color type '6', bitdepth = 8, 16
|
|
447
|
+
switch(bit_depth) {
|
|
448
|
+
case 8:
|
|
449
|
+
break;
|
|
450
|
+
case 16:
|
|
451
|
+
image_type = (pixel_depth == 64) ? FIT_RGBA16 : FIT_UNKNOWN;
|
|
452
|
+
break;
|
|
453
|
+
default:
|
|
454
|
+
image_type = FIT_UNKNOWN;
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
break;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// check for unknown or invalid formats
|
|
461
|
+
if(image_type == FIT_UNKNOWN) {
|
|
462
|
+
*output_image_type = image_type;
|
|
463
|
+
return FALSE;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
#ifndef FREEIMAGE_BIGENDIAN
|
|
467
|
+
if((image_type == FIT_UINT16) || (image_type == FIT_RGB16) || (image_type == FIT_RGBA16)) {
|
|
468
|
+
// turn on 16-bit byte swapping
|
|
469
|
+
png_set_swap(png_ptr);
|
|
470
|
+
}
|
|
471
|
+
#endif
|
|
472
|
+
|
|
473
|
+
#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
|
|
474
|
+
if((image_type == FIT_BITMAP) && ((color_type == PNG_COLOR_TYPE_RGB) || (color_type == PNG_COLOR_TYPE_RGB_ALPHA))) {
|
|
475
|
+
// flip the RGB pixels to BGR (or RGBA to BGRA)
|
|
476
|
+
png_set_bgr(png_ptr);
|
|
477
|
+
}
|
|
478
|
+
#endif
|
|
479
|
+
|
|
480
|
+
// gamma correction
|
|
481
|
+
// unlike the example in the libpng documentation, we have *no* idea where
|
|
482
|
+
// this file may have come from--so if it doesn't have a file gamma, don't
|
|
483
|
+
// do any correction ("do no harm")
|
|
484
|
+
|
|
485
|
+
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_gAMA)) {
|
|
486
|
+
double gamma = 0;
|
|
487
|
+
double screen_gamma = 2.2;
|
|
488
|
+
|
|
489
|
+
if (png_get_gAMA(png_ptr, info_ptr, &gamma) && ( flags & PNG_IGNOREGAMMA ) != PNG_IGNOREGAMMA) {
|
|
490
|
+
png_set_gamma(png_ptr, screen_gamma, gamma);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// all transformations have been registered; now update info_ptr data
|
|
495
|
+
png_read_update_info(png_ptr, info_ptr);
|
|
496
|
+
|
|
497
|
+
// return the output image type
|
|
498
|
+
*output_image_type = image_type;
|
|
499
|
+
|
|
500
|
+
return TRUE;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
static FIBITMAP * DLL_CALLCONV
|
|
504
|
+
Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
|
|
505
|
+
png_structp png_ptr = NULL;
|
|
506
|
+
png_infop info_ptr = NULL;
|
|
507
|
+
png_uint_32 width, height;
|
|
508
|
+
int color_type;
|
|
509
|
+
int bit_depth;
|
|
510
|
+
int pixel_depth = 0; // pixel_depth = bit_depth * channels
|
|
511
|
+
|
|
512
|
+
FIBITMAP *dib = NULL;
|
|
513
|
+
png_bytepp row_pointers = NULL;
|
|
514
|
+
|
|
515
|
+
fi_ioStructure fio;
|
|
516
|
+
fio.s_handle = handle;
|
|
517
|
+
fio.s_io = io;
|
|
518
|
+
|
|
519
|
+
if (handle) {
|
|
520
|
+
BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS;
|
|
521
|
+
|
|
522
|
+
try {
|
|
523
|
+
// check to see if the file is in fact a PNG file
|
|
524
|
+
|
|
525
|
+
BYTE png_check[PNG_BYTES_TO_CHECK];
|
|
526
|
+
|
|
527
|
+
io->read_proc(png_check, PNG_BYTES_TO_CHECK, 1, handle);
|
|
528
|
+
|
|
529
|
+
if (png_sig_cmp(png_check, (png_size_t)0, PNG_BYTES_TO_CHECK) != 0) {
|
|
530
|
+
return NULL; // Bad signature
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// create the chunk manage structure
|
|
534
|
+
|
|
535
|
+
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, error_handler, warning_handler);
|
|
536
|
+
|
|
537
|
+
if (!png_ptr) {
|
|
538
|
+
return NULL;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
// create the info structure
|
|
542
|
+
|
|
543
|
+
info_ptr = png_create_info_struct(png_ptr);
|
|
544
|
+
|
|
545
|
+
if (!info_ptr) {
|
|
546
|
+
png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
|
|
547
|
+
return NULL;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
// init the IO
|
|
551
|
+
|
|
552
|
+
png_set_read_fn(png_ptr, &fio, _ReadProc);
|
|
553
|
+
|
|
554
|
+
if (setjmp(png_jmpbuf(png_ptr))) {
|
|
555
|
+
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
|
556
|
+
return NULL;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
// because we have already read the signature...
|
|
560
|
+
|
|
561
|
+
png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK);
|
|
562
|
+
|
|
563
|
+
// read the IHDR chunk
|
|
564
|
+
|
|
565
|
+
png_read_info(png_ptr, info_ptr);
|
|
566
|
+
png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, NULL, NULL, NULL);
|
|
567
|
+
|
|
568
|
+
// configure the decoder
|
|
569
|
+
|
|
570
|
+
FREE_IMAGE_TYPE image_type = FIT_BITMAP;
|
|
571
|
+
|
|
572
|
+
if(!ConfigureDecoder(png_ptr, info_ptr, flags, &image_type)) {
|
|
573
|
+
throw FI_MSG_ERROR_UNSUPPORTED_FORMAT;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
// update image info
|
|
577
|
+
|
|
578
|
+
color_type = png_get_color_type(png_ptr, info_ptr);
|
|
579
|
+
bit_depth = png_get_bit_depth(png_ptr, info_ptr);
|
|
580
|
+
pixel_depth = bit_depth * png_get_channels(png_ptr, info_ptr);
|
|
581
|
+
|
|
582
|
+
// create a dib and write the bitmap header
|
|
583
|
+
// set up the dib palette, if needed
|
|
584
|
+
|
|
585
|
+
switch (color_type) {
|
|
586
|
+
case PNG_COLOR_TYPE_RGB:
|
|
587
|
+
case PNG_COLOR_TYPE_RGB_ALPHA:
|
|
588
|
+
dib = FreeImage_AllocateHeaderT(header_only, image_type, width, height, pixel_depth, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
|
|
589
|
+
break;
|
|
590
|
+
|
|
591
|
+
case PNG_COLOR_TYPE_PALETTE:
|
|
592
|
+
dib = FreeImage_AllocateHeaderT(header_only, image_type, width, height, pixel_depth, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
|
|
593
|
+
if(dib) {
|
|
594
|
+
png_colorp png_palette = NULL;
|
|
595
|
+
int palette_entries = 0;
|
|
596
|
+
|
|
597
|
+
png_get_PLTE(png_ptr,info_ptr, &png_palette, &palette_entries);
|
|
598
|
+
|
|
599
|
+
palette_entries = MIN((unsigned)palette_entries, FreeImage_GetColorsUsed(dib));
|
|
600
|
+
|
|
601
|
+
// store the palette
|
|
602
|
+
|
|
603
|
+
RGBQUAD *palette = FreeImage_GetPalette(dib);
|
|
604
|
+
for(int i = 0; i < palette_entries; i++) {
|
|
605
|
+
palette[i].rgbRed = png_palette[i].red;
|
|
606
|
+
palette[i].rgbGreen = png_palette[i].green;
|
|
607
|
+
palette[i].rgbBlue = png_palette[i].blue;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
break;
|
|
611
|
+
|
|
612
|
+
case PNG_COLOR_TYPE_GRAY:
|
|
613
|
+
dib = FreeImage_AllocateHeaderT(header_only, image_type, width, height, pixel_depth, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
|
|
614
|
+
|
|
615
|
+
if(dib && (pixel_depth <= 8)) {
|
|
616
|
+
RGBQUAD *palette = FreeImage_GetPalette(dib);
|
|
617
|
+
const int palette_entries = 1 << pixel_depth;
|
|
618
|
+
|
|
619
|
+
for(int i = 0; i < palette_entries; i++) {
|
|
620
|
+
palette[i].rgbRed =
|
|
621
|
+
palette[i].rgbGreen =
|
|
622
|
+
palette[i].rgbBlue = (BYTE)((i * 255) / (palette_entries - 1));
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
break;
|
|
626
|
+
|
|
627
|
+
default:
|
|
628
|
+
throw FI_MSG_ERROR_UNSUPPORTED_FORMAT;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
if(!dib) {
|
|
632
|
+
throw FI_MSG_ERROR_DIB_MEMORY;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
// store the transparency table
|
|
636
|
+
|
|
637
|
+
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
|
|
638
|
+
// array of alpha (transparency) entries for palette
|
|
639
|
+
png_bytep trans_alpha = NULL;
|
|
640
|
+
// number of transparent entries
|
|
641
|
+
int num_trans = 0;
|
|
642
|
+
// graylevel or color sample values of the single transparent color for non-paletted images
|
|
643
|
+
png_color_16p trans_color = NULL;
|
|
644
|
+
|
|
645
|
+
png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
|
|
646
|
+
|
|
647
|
+
if((color_type == PNG_COLOR_TYPE_GRAY) && trans_color) {
|
|
648
|
+
// single transparent color
|
|
649
|
+
if (trans_color->gray < 256) {
|
|
650
|
+
BYTE table[256];
|
|
651
|
+
memset(table, 0xFF, 256);
|
|
652
|
+
table[trans_color->gray] = 0;
|
|
653
|
+
FreeImage_SetTransparencyTable(dib, table, 256);
|
|
654
|
+
}
|
|
655
|
+
// check for a full transparency table, too
|
|
656
|
+
else if ((trans_alpha) && (pixel_depth <= 8)) {
|
|
657
|
+
FreeImage_SetTransparencyTable(dib, (BYTE *)trans_alpha, num_trans);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
} else if((color_type == PNG_COLOR_TYPE_PALETTE) && trans_alpha) {
|
|
661
|
+
// transparency table
|
|
662
|
+
FreeImage_SetTransparencyTable(dib, (BYTE *)trans_alpha, num_trans);
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
// store the background color (only supported for FIT_BITMAP types)
|
|
667
|
+
|
|
668
|
+
if ((image_type == FIT_BITMAP) && png_get_valid(png_ptr, info_ptr, PNG_INFO_bKGD)) {
|
|
669
|
+
// Get the background color to draw transparent and alpha images over.
|
|
670
|
+
// Note that even if the PNG file supplies a background, you are not required to
|
|
671
|
+
// use it - you should use the (solid) application background if it has one.
|
|
672
|
+
|
|
673
|
+
png_color_16p image_background = NULL;
|
|
674
|
+
RGBQUAD rgbBkColor;
|
|
675
|
+
|
|
676
|
+
if (png_get_bKGD(png_ptr, info_ptr, &image_background)) {
|
|
677
|
+
rgbBkColor.rgbRed = (BYTE)image_background->red;
|
|
678
|
+
rgbBkColor.rgbGreen = (BYTE)image_background->green;
|
|
679
|
+
rgbBkColor.rgbBlue = (BYTE)image_background->blue;
|
|
680
|
+
rgbBkColor.rgbReserved = 0;
|
|
681
|
+
|
|
682
|
+
FreeImage_SetBackgroundColor(dib, &rgbBkColor);
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
// get physical resolution
|
|
687
|
+
|
|
688
|
+
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_pHYs)) {
|
|
689
|
+
png_uint_32 res_x, res_y;
|
|
690
|
+
|
|
691
|
+
// we'll overload this var and use 0 to mean no phys data,
|
|
692
|
+
// since if it's not in meters we can't use it anyway
|
|
693
|
+
|
|
694
|
+
int res_unit_type = PNG_RESOLUTION_UNKNOWN;
|
|
695
|
+
|
|
696
|
+
png_get_pHYs(png_ptr,info_ptr, &res_x, &res_y, &res_unit_type);
|
|
697
|
+
|
|
698
|
+
if (res_unit_type == PNG_RESOLUTION_METER) {
|
|
699
|
+
FreeImage_SetDotsPerMeterX(dib, res_x);
|
|
700
|
+
FreeImage_SetDotsPerMeterY(dib, res_y);
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
// get possible ICC profile
|
|
705
|
+
|
|
706
|
+
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_iCCP)) {
|
|
707
|
+
png_charp profile_name = NULL;
|
|
708
|
+
png_bytep profile_data = NULL;
|
|
709
|
+
png_uint_32 profile_length = 0;
|
|
710
|
+
int compression_type;
|
|
711
|
+
|
|
712
|
+
png_get_iCCP(png_ptr, info_ptr, &profile_name, &compression_type, &profile_data, &profile_length);
|
|
713
|
+
|
|
714
|
+
// copy ICC profile data (must be done after FreeImage_AllocateHeader)
|
|
715
|
+
|
|
716
|
+
FreeImage_CreateICCProfile(dib, profile_data, profile_length);
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
// --- header only mode => clean-up and return
|
|
720
|
+
|
|
721
|
+
if (header_only) {
|
|
722
|
+
// get possible metadata (it can be located both before and after the image data)
|
|
723
|
+
ReadMetadata(png_ptr, info_ptr, dib);
|
|
724
|
+
if (png_ptr) {
|
|
725
|
+
// clean up after the read, and free any memory allocated - REQUIRED
|
|
726
|
+
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
|
727
|
+
}
|
|
728
|
+
return dib;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// set the individual row_pointers to point at the correct offsets
|
|
732
|
+
|
|
733
|
+
row_pointers = (png_bytepp)malloc(height * sizeof(png_bytep));
|
|
734
|
+
|
|
735
|
+
if (!row_pointers) {
|
|
736
|
+
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
|
737
|
+
FreeImage_Unload(dib);
|
|
738
|
+
return NULL;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
// read in the bitmap bits via the pointer table
|
|
742
|
+
// allow loading of PNG with minor errors (such as images with several IDAT chunks)
|
|
743
|
+
|
|
744
|
+
for (png_uint_32 k = 0; k < height; k++) {
|
|
745
|
+
row_pointers[height - 1 - k] = FreeImage_GetScanLine(dib, k);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
png_set_benign_errors(png_ptr, 1);
|
|
749
|
+
png_read_image(png_ptr, row_pointers);
|
|
750
|
+
|
|
751
|
+
// check if the bitmap contains transparency, if so enable it in the header
|
|
752
|
+
|
|
753
|
+
if (FreeImage_GetBPP(dib) == 32) {
|
|
754
|
+
if (FreeImage_GetColorType(dib) == FIC_RGBALPHA) {
|
|
755
|
+
FreeImage_SetTransparent(dib, TRUE);
|
|
756
|
+
} else {
|
|
757
|
+
FreeImage_SetTransparent(dib, FALSE);
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
// cleanup
|
|
762
|
+
|
|
763
|
+
if (row_pointers) {
|
|
764
|
+
free(row_pointers);
|
|
765
|
+
row_pointers = NULL;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
// read the rest of the file, getting any additional chunks in info_ptr
|
|
769
|
+
|
|
770
|
+
png_read_end(png_ptr, info_ptr);
|
|
771
|
+
|
|
772
|
+
// get possible metadata (it can be located both before and after the image data)
|
|
773
|
+
|
|
774
|
+
ReadMetadata(png_ptr, info_ptr, dib);
|
|
775
|
+
|
|
776
|
+
if (png_ptr) {
|
|
777
|
+
// clean up after the read, and free any memory allocated - REQUIRED
|
|
778
|
+
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
return dib;
|
|
782
|
+
|
|
783
|
+
} catch (const char *text) {
|
|
784
|
+
if (png_ptr) {
|
|
785
|
+
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
|
786
|
+
}
|
|
787
|
+
if (row_pointers) {
|
|
788
|
+
free(row_pointers);
|
|
789
|
+
}
|
|
790
|
+
if (dib) {
|
|
791
|
+
FreeImage_Unload(dib);
|
|
792
|
+
}
|
|
793
|
+
FreeImage_OutputMessageProc(s_format_id, text);
|
|
794
|
+
|
|
795
|
+
return NULL;
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
return NULL;
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
// --------------------------------------------------------------------------
|
|
803
|
+
|
|
804
|
+
static BOOL DLL_CALLCONV
|
|
805
|
+
Save(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data) {
|
|
806
|
+
png_structp png_ptr;
|
|
807
|
+
png_infop info_ptr;
|
|
808
|
+
png_colorp palette = NULL;
|
|
809
|
+
png_uint_32 width, height;
|
|
810
|
+
BOOL has_alpha_channel = FALSE;
|
|
811
|
+
|
|
812
|
+
RGBQUAD *pal; // pointer to dib palette
|
|
813
|
+
int bit_depth, pixel_depth; // pixel_depth = bit_depth * channels
|
|
814
|
+
int palette_entries;
|
|
815
|
+
int interlace_type;
|
|
816
|
+
|
|
817
|
+
fi_ioStructure fio;
|
|
818
|
+
fio.s_handle = handle;
|
|
819
|
+
fio.s_io = io;
|
|
820
|
+
|
|
821
|
+
if ((dib) && (handle)) {
|
|
822
|
+
try {
|
|
823
|
+
// create the chunk manage structure
|
|
824
|
+
|
|
825
|
+
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, error_handler, warning_handler);
|
|
826
|
+
|
|
827
|
+
if (!png_ptr) {
|
|
828
|
+
return FALSE;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
// allocate/initialize the image information data.
|
|
832
|
+
|
|
833
|
+
info_ptr = png_create_info_struct(png_ptr);
|
|
834
|
+
|
|
835
|
+
if (!info_ptr) {
|
|
836
|
+
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
|
|
837
|
+
return FALSE;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
// Set error handling. REQUIRED if you aren't supplying your own
|
|
841
|
+
// error handling functions in the png_create_write_struct() call.
|
|
842
|
+
|
|
843
|
+
if (setjmp(png_jmpbuf(png_ptr))) {
|
|
844
|
+
// if we get here, we had a problem reading the file
|
|
845
|
+
|
|
846
|
+
png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
847
|
+
|
|
848
|
+
return FALSE;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
// init the IO
|
|
852
|
+
|
|
853
|
+
png_set_write_fn(png_ptr, &fio, _WriteProc, _FlushProc);
|
|
854
|
+
|
|
855
|
+
// set physical resolution
|
|
856
|
+
|
|
857
|
+
png_uint_32 res_x = (png_uint_32)FreeImage_GetDotsPerMeterX(dib);
|
|
858
|
+
png_uint_32 res_y = (png_uint_32)FreeImage_GetDotsPerMeterY(dib);
|
|
859
|
+
|
|
860
|
+
if ((res_x > 0) && (res_y > 0)) {
|
|
861
|
+
png_set_pHYs(png_ptr, info_ptr, res_x, res_y, PNG_RESOLUTION_METER);
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
// Set the image information here. Width and height are up to 2^31,
|
|
865
|
+
// bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
|
|
866
|
+
// the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
|
|
867
|
+
// PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
|
|
868
|
+
// or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or
|
|
869
|
+
// PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
|
|
870
|
+
// currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED
|
|
871
|
+
|
|
872
|
+
width = FreeImage_GetWidth(dib);
|
|
873
|
+
height = FreeImage_GetHeight(dib);
|
|
874
|
+
pixel_depth = FreeImage_GetBPP(dib);
|
|
875
|
+
|
|
876
|
+
BOOL bInterlaced = FALSE;
|
|
877
|
+
if( (flags & PNG_INTERLACED) == PNG_INTERLACED) {
|
|
878
|
+
interlace_type = PNG_INTERLACE_ADAM7;
|
|
879
|
+
bInterlaced = TRUE;
|
|
880
|
+
} else {
|
|
881
|
+
interlace_type = PNG_INTERLACE_NONE;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
// set the ZLIB compression level or default to PNG default compression level (ZLIB level = 6)
|
|
885
|
+
int zlib_level = flags & 0x0F;
|
|
886
|
+
if((zlib_level >= 1) && (zlib_level <= 9)) {
|
|
887
|
+
png_set_compression_level(png_ptr, zlib_level);
|
|
888
|
+
} else if((flags & PNG_Z_NO_COMPRESSION) == PNG_Z_NO_COMPRESSION) {
|
|
889
|
+
png_set_compression_level(png_ptr, Z_NO_COMPRESSION);
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
// filtered strategy works better for high color images
|
|
893
|
+
if(pixel_depth >= 16){
|
|
894
|
+
png_set_compression_strategy(png_ptr, Z_FILTERED);
|
|
895
|
+
png_set_filter(png_ptr, 0, PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_PAETH);
|
|
896
|
+
} else {
|
|
897
|
+
png_set_compression_strategy(png_ptr, Z_DEFAULT_STRATEGY);
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib);
|
|
901
|
+
if(image_type == FIT_BITMAP) {
|
|
902
|
+
// standard image type
|
|
903
|
+
bit_depth = (pixel_depth > 8) ? 8 : pixel_depth;
|
|
904
|
+
} else {
|
|
905
|
+
// 16-bit greyscale or 16-bit RGB(A)
|
|
906
|
+
bit_depth = 16;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
// check for transparent images
|
|
910
|
+
BOOL bIsTransparent =
|
|
911
|
+
(image_type == FIT_BITMAP) && FreeImage_IsTransparent(dib) && (FreeImage_GetTransparencyCount(dib) > 0) ? TRUE : FALSE;
|
|
912
|
+
|
|
913
|
+
switch (FreeImage_GetColorType(dib)) {
|
|
914
|
+
case FIC_MINISWHITE:
|
|
915
|
+
if(!bIsTransparent) {
|
|
916
|
+
// Invert monochrome files to have 0 as black and 1 as white (no break here)
|
|
917
|
+
png_set_invert_mono(png_ptr);
|
|
918
|
+
}
|
|
919
|
+
// (fall through)
|
|
920
|
+
|
|
921
|
+
case FIC_MINISBLACK:
|
|
922
|
+
if(!bIsTransparent) {
|
|
923
|
+
png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
|
|
924
|
+
PNG_COLOR_TYPE_GRAY, interlace_type,
|
|
925
|
+
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
|
926
|
+
break;
|
|
927
|
+
}
|
|
928
|
+
// If a monochrome image is transparent, save it with a palette
|
|
929
|
+
// (fall through)
|
|
930
|
+
|
|
931
|
+
case FIC_PALETTE:
|
|
932
|
+
{
|
|
933
|
+
png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
|
|
934
|
+
PNG_COLOR_TYPE_PALETTE, interlace_type,
|
|
935
|
+
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
|
936
|
+
|
|
937
|
+
// set the palette
|
|
938
|
+
|
|
939
|
+
palette_entries = 1 << bit_depth;
|
|
940
|
+
palette = (png_colorp)png_malloc(png_ptr, palette_entries * sizeof (png_color));
|
|
941
|
+
pal = FreeImage_GetPalette(dib);
|
|
942
|
+
|
|
943
|
+
for (int i = 0; i < palette_entries; i++) {
|
|
944
|
+
palette[i].red = pal[i].rgbRed;
|
|
945
|
+
palette[i].green = pal[i].rgbGreen;
|
|
946
|
+
palette[i].blue = pal[i].rgbBlue;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
png_set_PLTE(png_ptr, info_ptr, palette, palette_entries);
|
|
950
|
+
|
|
951
|
+
// You must not free palette here, because png_set_PLTE only makes a link to
|
|
952
|
+
// the palette that you malloced. Wait until you are about to destroy
|
|
953
|
+
// the png structure.
|
|
954
|
+
|
|
955
|
+
break;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
case FIC_RGBALPHA :
|
|
959
|
+
has_alpha_channel = TRUE;
|
|
960
|
+
|
|
961
|
+
png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
|
|
962
|
+
PNG_COLOR_TYPE_RGBA, interlace_type,
|
|
963
|
+
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
|
964
|
+
|
|
965
|
+
#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
|
|
966
|
+
// flip BGR pixels to RGB
|
|
967
|
+
if(image_type == FIT_BITMAP) {
|
|
968
|
+
png_set_bgr(png_ptr);
|
|
969
|
+
}
|
|
970
|
+
#endif
|
|
971
|
+
break;
|
|
972
|
+
|
|
973
|
+
case FIC_RGB:
|
|
974
|
+
png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
|
|
975
|
+
PNG_COLOR_TYPE_RGB, interlace_type,
|
|
976
|
+
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
|
977
|
+
|
|
978
|
+
#if FREEIMAGE_COLORORDER == FREEIMAGE_COLORORDER_BGR
|
|
979
|
+
// flip BGR pixels to RGB
|
|
980
|
+
if(image_type == FIT_BITMAP) {
|
|
981
|
+
png_set_bgr(png_ptr);
|
|
982
|
+
}
|
|
983
|
+
#endif
|
|
984
|
+
break;
|
|
985
|
+
|
|
986
|
+
case FIC_CMYK:
|
|
987
|
+
break;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
// write possible ICC profile
|
|
991
|
+
|
|
992
|
+
FIICCPROFILE *iccProfile = FreeImage_GetICCProfile(dib);
|
|
993
|
+
if (iccProfile->size && iccProfile->data) {
|
|
994
|
+
png_set_iCCP(png_ptr, info_ptr, "Embedded Profile", 0, (png_const_bytep)iccProfile->data, iccProfile->size);
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
// write metadata
|
|
998
|
+
|
|
999
|
+
WriteMetadata(png_ptr, info_ptr, dib);
|
|
1000
|
+
|
|
1001
|
+
// Optional gamma chunk is strongly suggested if you have any guess
|
|
1002
|
+
// as to the correct gamma of the image.
|
|
1003
|
+
// png_set_gAMA(png_ptr, info_ptr, gamma);
|
|
1004
|
+
|
|
1005
|
+
// set the transparency table
|
|
1006
|
+
|
|
1007
|
+
if (bIsTransparent) {
|
|
1008
|
+
png_set_tRNS(png_ptr, info_ptr, FreeImage_GetTransparencyTable(dib), FreeImage_GetTransparencyCount(dib), NULL);
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
// set the background color
|
|
1012
|
+
|
|
1013
|
+
if(FreeImage_HasBackgroundColor(dib)) {
|
|
1014
|
+
png_color_16 image_background;
|
|
1015
|
+
RGBQUAD rgbBkColor;
|
|
1016
|
+
|
|
1017
|
+
FreeImage_GetBackgroundColor(dib, &rgbBkColor);
|
|
1018
|
+
memset(&image_background, 0, sizeof(png_color_16));
|
|
1019
|
+
image_background.blue = rgbBkColor.rgbBlue;
|
|
1020
|
+
image_background.green = rgbBkColor.rgbGreen;
|
|
1021
|
+
image_background.red = rgbBkColor.rgbRed;
|
|
1022
|
+
image_background.index = rgbBkColor.rgbReserved;
|
|
1023
|
+
|
|
1024
|
+
png_set_bKGD(png_ptr, info_ptr, &image_background);
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
// Write the file header information.
|
|
1028
|
+
|
|
1029
|
+
png_write_info(png_ptr, info_ptr);
|
|
1030
|
+
|
|
1031
|
+
// write out the image data
|
|
1032
|
+
|
|
1033
|
+
#ifndef FREEIMAGE_BIGENDIAN
|
|
1034
|
+
if (bit_depth == 16) {
|
|
1035
|
+
// turn on 16 bit byte swapping
|
|
1036
|
+
png_set_swap(png_ptr);
|
|
1037
|
+
}
|
|
1038
|
+
#endif
|
|
1039
|
+
|
|
1040
|
+
int number_passes = 1;
|
|
1041
|
+
if (bInterlaced) {
|
|
1042
|
+
number_passes = png_set_interlace_handling(png_ptr);
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
if ((pixel_depth == 32) && (!has_alpha_channel)) {
|
|
1046
|
+
BYTE *buffer = (BYTE *)malloc(width * 3);
|
|
1047
|
+
|
|
1048
|
+
// transparent conversion to 24-bit
|
|
1049
|
+
// the number of passes is either 1 for non-interlaced images, or 7 for interlaced images
|
|
1050
|
+
for (int pass = 0; pass < number_passes; pass++) {
|
|
1051
|
+
for (png_uint_32 k = 0; k < height; k++) {
|
|
1052
|
+
FreeImage_ConvertLine32To24(buffer, FreeImage_GetScanLine(dib, height - k - 1), width);
|
|
1053
|
+
png_write_row(png_ptr, buffer);
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
free(buffer);
|
|
1057
|
+
} else {
|
|
1058
|
+
// the number of passes is either 1 for non-interlaced images, or 7 for interlaced images
|
|
1059
|
+
for (int pass = 0; pass < number_passes; pass++) {
|
|
1060
|
+
for (png_uint_32 k = 0; k < height; k++) {
|
|
1061
|
+
png_write_row(png_ptr, FreeImage_GetScanLine(dib, height - k - 1));
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
// It is REQUIRED to call this to finish writing the rest of the file
|
|
1067
|
+
// Bug with png_flush
|
|
1068
|
+
|
|
1069
|
+
png_write_end(png_ptr, info_ptr);
|
|
1070
|
+
|
|
1071
|
+
// clean up after the write, and free any memory allocated
|
|
1072
|
+
if (palette) {
|
|
1073
|
+
png_free(png_ptr, palette);
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
1077
|
+
|
|
1078
|
+
return TRUE;
|
|
1079
|
+
|
|
1080
|
+
} catch (const char *text) {
|
|
1081
|
+
if(png_ptr) {
|
|
1082
|
+
png_destroy_write_struct(&png_ptr, &info_ptr);
|
|
1083
|
+
}
|
|
1084
|
+
FreeImage_OutputMessageProc(s_format_id, text);
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
return FALSE;
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
// ==========================================================
|
|
1092
|
+
// Init
|
|
1093
|
+
// ==========================================================
|
|
1094
|
+
|
|
1095
|
+
void DLL_CALLCONV
|
|
1096
|
+
InitPNG(Plugin *plugin, int format_id) {
|
|
1097
|
+
s_format_id = format_id;
|
|
1098
|
+
|
|
1099
|
+
plugin->format_proc = Format;
|
|
1100
|
+
plugin->description_proc = Description;
|
|
1101
|
+
plugin->extension_proc = Extension;
|
|
1102
|
+
plugin->regexpr_proc = RegExpr;
|
|
1103
|
+
plugin->open_proc = NULL;
|
|
1104
|
+
plugin->close_proc = NULL;
|
|
1105
|
+
plugin->pagecount_proc = NULL;
|
|
1106
|
+
plugin->pagecapability_proc = NULL;
|
|
1107
|
+
plugin->load_proc = Load;
|
|
1108
|
+
plugin->save_proc = Save;
|
|
1109
|
+
plugin->validate_proc = Validate;
|
|
1110
|
+
plugin->mime_proc = MimeType;
|
|
1111
|
+
plugin->supports_export_bpp_proc = SupportsExportDepth;
|
|
1112
|
+
plugin->supports_export_type_proc = SupportsExportType;
|
|
1113
|
+
plugin->supports_icc_profiles_proc = SupportsICCProfiles;
|
|
1114
|
+
plugin->supports_no_pixels_proc = SupportsNoPixels;
|
|
1115
|
+
}
|