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,917 @@
|
|
|
1
|
+
// ==========================================================
|
|
2
|
+
// Bitmap rotation by means of 3 shears.
|
|
3
|
+
//
|
|
4
|
+
// Design and implementation by
|
|
5
|
+
// - Herv� Drolon (drolon@infonie.fr)
|
|
6
|
+
// - Thorsten Radde (support@IdealSoftware.com)
|
|
7
|
+
// - Mihail Naydenov (mnaydenov@users.sourceforge.net)
|
|
8
|
+
//
|
|
9
|
+
// This file is part of FreeImage 3
|
|
10
|
+
//
|
|
11
|
+
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
|
|
12
|
+
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
|
|
13
|
+
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
|
|
14
|
+
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
|
|
15
|
+
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
|
|
16
|
+
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
|
|
17
|
+
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
|
|
18
|
+
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
|
|
19
|
+
// THIS DISCLAIMER.
|
|
20
|
+
//
|
|
21
|
+
// Use at your own risk!
|
|
22
|
+
// ==========================================================
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
============================================================
|
|
26
|
+
References :
|
|
27
|
+
[1] Paeth A., A Fast Algorithm for General Raster Rotation.
|
|
28
|
+
Graphics Gems, p. 179, Andrew Glassner editor, Academic Press, 1990.
|
|
29
|
+
[2] Yariv E., High quality image rotation (rotate by shear).
|
|
30
|
+
[Online] http://www.codeproject.com/bitmap/rotatebyshear.asp
|
|
31
|
+
[3] Treskunov A., Fast and high quality true-color bitmap rotation function.
|
|
32
|
+
[Online] http://anton.treskunov.net/Software/doc/fast_and_high_quality_true_color_bitmap_rotation_function.html
|
|
33
|
+
============================================================
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
#include "FreeImage.h"
|
|
37
|
+
#include "Utilities.h"
|
|
38
|
+
|
|
39
|
+
#define RBLOCK 64 // image blocks of RBLOCK*RBLOCK pixels
|
|
40
|
+
|
|
41
|
+
// --------------------------------------------------------------------------
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
Skews a row horizontally (with filtered weights).
|
|
45
|
+
Limited to 45 degree skewing only. Filters two adjacent pixels.
|
|
46
|
+
Parameter T can be BYTE, WORD of float.
|
|
47
|
+
@param src Pointer to source image to rotate
|
|
48
|
+
@param dst Pointer to destination image
|
|
49
|
+
@param row Row index
|
|
50
|
+
@param iOffset Skew offset
|
|
51
|
+
@param dWeight Relative weight of right pixel
|
|
52
|
+
@param bkcolor Background color
|
|
53
|
+
*/
|
|
54
|
+
template <class T> void
|
|
55
|
+
HorizontalSkewT(FIBITMAP *src, FIBITMAP *dst, int row, int iOffset, double weight, const void *bkcolor = NULL) {
|
|
56
|
+
int iXPos;
|
|
57
|
+
|
|
58
|
+
const unsigned src_width = FreeImage_GetWidth(src);
|
|
59
|
+
const unsigned dst_width = FreeImage_GetWidth(dst);
|
|
60
|
+
|
|
61
|
+
T pxlSrc[4], pxlLeft[4], pxlOldLeft[4]; // 4 = 4*sizeof(T) max
|
|
62
|
+
|
|
63
|
+
// background
|
|
64
|
+
const T pxlBlack[4] = {0, 0, 0, 0 };
|
|
65
|
+
const T *pxlBkg = static_cast<const T*>(bkcolor); // assume at least bytespp and 4*sizeof(T) max
|
|
66
|
+
if(!pxlBkg) {
|
|
67
|
+
// default background color is black
|
|
68
|
+
pxlBkg = pxlBlack;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// calculate the number of bytes per pixel
|
|
72
|
+
const unsigned bytespp = FreeImage_GetLine(src) / FreeImage_GetWidth(src);
|
|
73
|
+
// calculate the number of samples per pixel
|
|
74
|
+
const unsigned samples = bytespp / sizeof(T);
|
|
75
|
+
|
|
76
|
+
BYTE *src_bits = FreeImage_GetScanLine(src, row);
|
|
77
|
+
BYTE *dst_bits = FreeImage_GetScanLine(dst, row);
|
|
78
|
+
|
|
79
|
+
// fill gap left of skew with background
|
|
80
|
+
if(bkcolor) {
|
|
81
|
+
for(int k = 0; k < iOffset; k++) {
|
|
82
|
+
memcpy(&dst_bits[k * bytespp], bkcolor, bytespp);
|
|
83
|
+
}
|
|
84
|
+
AssignPixel((BYTE*)&pxlOldLeft[0], (BYTE*)bkcolor, bytespp);
|
|
85
|
+
} else {
|
|
86
|
+
if(iOffset > 0) {
|
|
87
|
+
memset(dst_bits, 0, iOffset * bytespp);
|
|
88
|
+
}
|
|
89
|
+
memset(&pxlOldLeft[0], 0, bytespp);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
for(unsigned i = 0; i < src_width; i++) {
|
|
93
|
+
// loop through row pixels
|
|
94
|
+
AssignPixel((BYTE*)&pxlSrc[0], (BYTE*)src_bits, bytespp);
|
|
95
|
+
// calculate weights
|
|
96
|
+
for(unsigned j = 0; j < samples; j++) {
|
|
97
|
+
pxlLeft[j] = static_cast<T>(pxlBkg[j] + (pxlSrc[j] - pxlBkg[j]) * weight + 0.5);
|
|
98
|
+
}
|
|
99
|
+
// check boundaries
|
|
100
|
+
iXPos = i + iOffset;
|
|
101
|
+
if((iXPos >= 0) && (iXPos < (int)dst_width)) {
|
|
102
|
+
// update left over on source
|
|
103
|
+
for(unsigned j = 0; j < samples; j++) {
|
|
104
|
+
pxlSrc[j] = pxlSrc[j] - (pxlLeft[j] - pxlOldLeft[j]);
|
|
105
|
+
}
|
|
106
|
+
AssignPixel((BYTE*)&dst_bits[iXPos*bytespp], (BYTE*)&pxlSrc[0], bytespp);
|
|
107
|
+
}
|
|
108
|
+
// save leftover for next pixel in scan
|
|
109
|
+
AssignPixel((BYTE*)&pxlOldLeft[0], (BYTE*)&pxlLeft[0], bytespp);
|
|
110
|
+
|
|
111
|
+
// next pixel in scan
|
|
112
|
+
src_bits += bytespp;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// go to rightmost point of skew
|
|
116
|
+
iXPos = src_width + iOffset;
|
|
117
|
+
|
|
118
|
+
if((iXPos >= 0) && (iXPos < (int)dst_width)) {
|
|
119
|
+
dst_bits = FreeImage_GetScanLine(dst, row) + iXPos * bytespp;
|
|
120
|
+
|
|
121
|
+
// If still in image bounds, put leftovers there
|
|
122
|
+
AssignPixel((BYTE*)dst_bits, (BYTE*)&pxlOldLeft[0], bytespp);
|
|
123
|
+
|
|
124
|
+
// clear to the right of the skewed line with background
|
|
125
|
+
dst_bits += bytespp;
|
|
126
|
+
if(bkcolor) {
|
|
127
|
+
for(unsigned i = 0; i < dst_width - iXPos - 1; i++) {
|
|
128
|
+
memcpy(&dst_bits[i * bytespp], bkcolor, bytespp);
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
memset(dst_bits, 0, bytespp * (dst_width - iXPos - 1));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
Skews a row horizontally (with filtered weights).
|
|
139
|
+
Limited to 45 degree skewing only. Filters two adjacent pixels.
|
|
140
|
+
@param src Pointer to source image to rotate
|
|
141
|
+
@param dst Pointer to destination image
|
|
142
|
+
@param row Row index
|
|
143
|
+
@param iOffset Skew offset
|
|
144
|
+
@param dWeight Relative weight of right pixel
|
|
145
|
+
@param bkcolor Background color
|
|
146
|
+
*/
|
|
147
|
+
static void
|
|
148
|
+
HorizontalSkew(FIBITMAP *src, FIBITMAP *dst, int row, int iOffset, double dWeight, const void *bkcolor) {
|
|
149
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(src);
|
|
150
|
+
|
|
151
|
+
switch(image_type) {
|
|
152
|
+
case FIT_BITMAP:
|
|
153
|
+
switch(FreeImage_GetBPP(src)) {
|
|
154
|
+
case 8:
|
|
155
|
+
case 24:
|
|
156
|
+
case 32:
|
|
157
|
+
HorizontalSkewT<BYTE>(src, dst, row, iOffset, dWeight, bkcolor);
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
break;
|
|
161
|
+
case FIT_UINT16:
|
|
162
|
+
case FIT_RGB16:
|
|
163
|
+
case FIT_RGBA16:
|
|
164
|
+
HorizontalSkewT<WORD>(src, dst, row, iOffset, dWeight, bkcolor);
|
|
165
|
+
break;
|
|
166
|
+
case FIT_FLOAT:
|
|
167
|
+
case FIT_RGBF:
|
|
168
|
+
case FIT_RGBAF:
|
|
169
|
+
HorizontalSkewT<float>(src, dst, row, iOffset, dWeight, bkcolor);
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
Skews a column vertically (with filtered weights).
|
|
176
|
+
Limited to 45 degree skewing only. Filters two adjacent pixels.
|
|
177
|
+
Parameter T can be BYTE, WORD of float.
|
|
178
|
+
@param src Pointer to source image to rotate
|
|
179
|
+
@param dst Pointer to destination image
|
|
180
|
+
@param col Column index
|
|
181
|
+
@param iOffset Skew offset
|
|
182
|
+
@param dWeight Relative weight of upper pixel
|
|
183
|
+
@param bkcolor Background color
|
|
184
|
+
*/
|
|
185
|
+
template <class T> void
|
|
186
|
+
VerticalSkewT(FIBITMAP *src, FIBITMAP *dst, int col, int iOffset, double weight, const void *bkcolor = NULL) {
|
|
187
|
+
int iYPos;
|
|
188
|
+
|
|
189
|
+
unsigned src_height = FreeImage_GetHeight(src);
|
|
190
|
+
unsigned dst_height = FreeImage_GetHeight(dst);
|
|
191
|
+
|
|
192
|
+
T pxlSrc[4], pxlLeft[4], pxlOldLeft[4]; // 4 = 4*sizeof(T) max
|
|
193
|
+
|
|
194
|
+
// background
|
|
195
|
+
const T pxlBlack[4] = {0, 0, 0, 0 };
|
|
196
|
+
const T *pxlBkg = static_cast<const T*>(bkcolor); // assume at least bytespp and 4*sizeof(T) max
|
|
197
|
+
if(!pxlBkg) {
|
|
198
|
+
// default background color is black
|
|
199
|
+
pxlBkg = pxlBlack;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// calculate the number of bytes per pixel
|
|
203
|
+
const unsigned bytespp = FreeImage_GetLine(src) / FreeImage_GetWidth(src);
|
|
204
|
+
// calculate the number of samples per pixel
|
|
205
|
+
const unsigned samples = bytespp / sizeof(T);
|
|
206
|
+
|
|
207
|
+
const unsigned src_pitch = FreeImage_GetPitch(src);
|
|
208
|
+
const unsigned dst_pitch = FreeImage_GetPitch(dst);
|
|
209
|
+
const unsigned index = col * bytespp;
|
|
210
|
+
|
|
211
|
+
BYTE *src_bits = FreeImage_GetBits(src) + index;
|
|
212
|
+
BYTE *dst_bits = FreeImage_GetBits(dst) + index;
|
|
213
|
+
|
|
214
|
+
// fill gap above skew with background
|
|
215
|
+
if(bkcolor) {
|
|
216
|
+
for(int k = 0; k < iOffset; k++) {
|
|
217
|
+
memcpy(dst_bits, bkcolor, bytespp);
|
|
218
|
+
dst_bits += dst_pitch;
|
|
219
|
+
}
|
|
220
|
+
memcpy(&pxlOldLeft[0], bkcolor, bytespp);
|
|
221
|
+
} else {
|
|
222
|
+
for(int k = 0; k < iOffset; k++) {
|
|
223
|
+
memset(dst_bits, 0, bytespp);
|
|
224
|
+
dst_bits += dst_pitch;
|
|
225
|
+
}
|
|
226
|
+
memset(&pxlOldLeft[0], 0, bytespp);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
for(unsigned i = 0; i < src_height; i++) {
|
|
230
|
+
// loop through column pixels
|
|
231
|
+
AssignPixel((BYTE*)(&pxlSrc[0]), src_bits, bytespp);
|
|
232
|
+
// calculate weights
|
|
233
|
+
for(unsigned j = 0; j < samples; j++) {
|
|
234
|
+
pxlLeft[j] = static_cast<T>(pxlBkg[j] + (pxlSrc[j] - pxlBkg[j]) * weight + 0.5);
|
|
235
|
+
}
|
|
236
|
+
// check boundaries
|
|
237
|
+
iYPos = i + iOffset;
|
|
238
|
+
if((iYPos >= 0) && (iYPos < (int)dst_height)) {
|
|
239
|
+
// update left over on source
|
|
240
|
+
for(unsigned j = 0; j < samples; j++) {
|
|
241
|
+
pxlSrc[j] = pxlSrc[j] - (pxlLeft[j] - pxlOldLeft[j]);
|
|
242
|
+
}
|
|
243
|
+
dst_bits = FreeImage_GetScanLine(dst, iYPos) + index;
|
|
244
|
+
AssignPixel(dst_bits, (BYTE*)(&pxlSrc[0]), bytespp);
|
|
245
|
+
}
|
|
246
|
+
// save leftover for next pixel in scan
|
|
247
|
+
AssignPixel((BYTE*)(&pxlOldLeft[0]), (BYTE*)(&pxlLeft[0]), bytespp);
|
|
248
|
+
|
|
249
|
+
// next pixel in scan
|
|
250
|
+
src_bits += src_pitch;
|
|
251
|
+
}
|
|
252
|
+
// go to bottom point of skew
|
|
253
|
+
iYPos = src_height + iOffset;
|
|
254
|
+
|
|
255
|
+
if((iYPos >= 0) && (iYPos < (int)dst_height)) {
|
|
256
|
+
dst_bits = FreeImage_GetScanLine(dst, iYPos) + index;
|
|
257
|
+
|
|
258
|
+
// if still in image bounds, put leftovers there
|
|
259
|
+
AssignPixel((BYTE*)(dst_bits), (BYTE*)(&pxlOldLeft[0]), bytespp);
|
|
260
|
+
|
|
261
|
+
// clear below skewed line with background
|
|
262
|
+
if(bkcolor) {
|
|
263
|
+
while(++iYPos < (int)dst_height) {
|
|
264
|
+
dst_bits += dst_pitch;
|
|
265
|
+
AssignPixel((BYTE*)(dst_bits), (BYTE*)(bkcolor), bytespp);
|
|
266
|
+
}
|
|
267
|
+
} else {
|
|
268
|
+
while(++iYPos < (int)dst_height) {
|
|
269
|
+
dst_bits += dst_pitch;
|
|
270
|
+
memset(dst_bits, 0, bytespp);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
Skews a column vertically (with filtered weights).
|
|
278
|
+
Limited to 45 degree skewing only. Filters two adjacent pixels.
|
|
279
|
+
@param src Pointer to source image to rotate
|
|
280
|
+
@param dst Pointer to destination image
|
|
281
|
+
@param col Column index
|
|
282
|
+
@param iOffset Skew offset
|
|
283
|
+
@param dWeight Relative weight of upper pixel
|
|
284
|
+
@param bkcolor Background color
|
|
285
|
+
*/
|
|
286
|
+
static void
|
|
287
|
+
VerticalSkew(FIBITMAP *src, FIBITMAP *dst, int col, int iOffset, double dWeight, const void *bkcolor) {
|
|
288
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(src);
|
|
289
|
+
|
|
290
|
+
switch(image_type) {
|
|
291
|
+
case FIT_BITMAP:
|
|
292
|
+
switch(FreeImage_GetBPP(src)) {
|
|
293
|
+
case 8:
|
|
294
|
+
case 24:
|
|
295
|
+
case 32:
|
|
296
|
+
VerticalSkewT<BYTE>(src, dst, col, iOffset, dWeight, bkcolor);
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
break;
|
|
300
|
+
case FIT_UINT16:
|
|
301
|
+
case FIT_RGB16:
|
|
302
|
+
case FIT_RGBA16:
|
|
303
|
+
VerticalSkewT<WORD>(src, dst, col, iOffset, dWeight, bkcolor);
|
|
304
|
+
break;
|
|
305
|
+
case FIT_FLOAT:
|
|
306
|
+
case FIT_RGBF:
|
|
307
|
+
case FIT_RGBAF:
|
|
308
|
+
VerticalSkewT<float>(src, dst, col, iOffset, dWeight, bkcolor);
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
Rotates an image by 90 degrees (counter clockwise).
|
|
315
|
+
Precise rotation, no filters required.<br>
|
|
316
|
+
Code adapted from CxImage (http://www.xdp.it/cximage.htm)
|
|
317
|
+
@param src Pointer to source image to rotate
|
|
318
|
+
@return Returns a pointer to a newly allocated rotated image if successful, returns NULL otherwise
|
|
319
|
+
*/
|
|
320
|
+
static FIBITMAP*
|
|
321
|
+
Rotate90(FIBITMAP *src) {
|
|
322
|
+
|
|
323
|
+
const unsigned bpp = FreeImage_GetBPP(src);
|
|
324
|
+
|
|
325
|
+
const unsigned src_width = FreeImage_GetWidth(src);
|
|
326
|
+
const unsigned src_height = FreeImage_GetHeight(src);
|
|
327
|
+
const unsigned dst_width = src_height;
|
|
328
|
+
const unsigned dst_height = src_width;
|
|
329
|
+
|
|
330
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(src);
|
|
331
|
+
|
|
332
|
+
// allocate and clear dst image
|
|
333
|
+
FIBITMAP *dst = FreeImage_AllocateT(image_type, dst_width, dst_height, bpp);
|
|
334
|
+
if(NULL == dst) return NULL;
|
|
335
|
+
|
|
336
|
+
// get src and dst scan width
|
|
337
|
+
const unsigned src_pitch = FreeImage_GetPitch(src);
|
|
338
|
+
const unsigned dst_pitch = FreeImage_GetPitch(dst);
|
|
339
|
+
|
|
340
|
+
switch(image_type) {
|
|
341
|
+
case FIT_BITMAP:
|
|
342
|
+
if(bpp == 1) {
|
|
343
|
+
// speedy rotate for BW images
|
|
344
|
+
|
|
345
|
+
BYTE *bsrc = FreeImage_GetBits(src);
|
|
346
|
+
BYTE *bdest = FreeImage_GetBits(dst);
|
|
347
|
+
|
|
348
|
+
BYTE *dbitsmax = bdest + dst_height * dst_pitch - 1;
|
|
349
|
+
|
|
350
|
+
for(unsigned y = 0; y < src_height; y++) {
|
|
351
|
+
// figure out the column we are going to be copying to
|
|
352
|
+
const div_t div_r = div(y, 8);
|
|
353
|
+
// set bit pos of src column byte
|
|
354
|
+
const BYTE bitpos = (BYTE)(128 >> div_r.rem);
|
|
355
|
+
BYTE *srcdisp = bsrc + y * src_pitch;
|
|
356
|
+
for(unsigned x = 0; x < src_pitch; x++) {
|
|
357
|
+
// get source bits
|
|
358
|
+
BYTE *sbits = srcdisp + x;
|
|
359
|
+
// get destination column
|
|
360
|
+
BYTE *nrow = bdest + (dst_height - 1 - (x * 8)) * dst_pitch + div_r.quot;
|
|
361
|
+
for (int z = 0; z < 8; z++) {
|
|
362
|
+
// get destination byte
|
|
363
|
+
BYTE *dbits = nrow - z * dst_pitch;
|
|
364
|
+
if ((dbits < bdest) || (dbits > dbitsmax)) break;
|
|
365
|
+
if (*sbits & (128 >> z)) *dbits |= bitpos;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
else if((bpp == 8) || (bpp == 24) || (bpp == 32)) {
|
|
371
|
+
// anything other than BW :
|
|
372
|
+
// This optimized version of rotation rotates image by smaller blocks. It is quite
|
|
373
|
+
// a bit faster than obvious algorithm, because it produces much less CPU cache misses.
|
|
374
|
+
// This optimization can be tuned by changing block size (RBLOCK). 96 is good value for current
|
|
375
|
+
// CPUs (tested on Athlon XP and Celeron D). Larger value (if CPU has enough cache) will increase
|
|
376
|
+
// speed somehow, but once you drop out of CPU's cache, things will slow down drastically.
|
|
377
|
+
// For older CPUs with less cache, lower value would yield better results.
|
|
378
|
+
|
|
379
|
+
BYTE *bsrc = FreeImage_GetBits(src); // source pixels
|
|
380
|
+
BYTE *bdest = FreeImage_GetBits(dst); // destination pixels
|
|
381
|
+
|
|
382
|
+
// calculate the number of bytes per pixel (1 for 8-bit, 3 for 24-bit or 4 for 32-bit)
|
|
383
|
+
const unsigned bytespp = FreeImage_GetLine(src) / FreeImage_GetWidth(src);
|
|
384
|
+
|
|
385
|
+
// for all image blocks of RBLOCK*RBLOCK pixels
|
|
386
|
+
|
|
387
|
+
// x-segment
|
|
388
|
+
for(unsigned xs = 0; xs < dst_width; xs += RBLOCK) {
|
|
389
|
+
// y-segment
|
|
390
|
+
for(unsigned ys = 0; ys < dst_height; ys += RBLOCK) {
|
|
391
|
+
for(unsigned y = ys; y < MIN(dst_height, ys + RBLOCK); y++) { // do rotation
|
|
392
|
+
const unsigned y2 = dst_height - y - 1;
|
|
393
|
+
// point to src pixel at (y2, xs)
|
|
394
|
+
BYTE *src_bits = bsrc + (xs * src_pitch) + (y2 * bytespp);
|
|
395
|
+
// point to dst pixel at (xs, y)
|
|
396
|
+
BYTE *dst_bits = bdest + (y * dst_pitch) + (xs * bytespp);
|
|
397
|
+
for(unsigned x = xs; x < MIN(dst_width, xs + RBLOCK); x++) {
|
|
398
|
+
// dst.SetPixel(x, y, src.GetPixel(y2, x));
|
|
399
|
+
AssignPixel(dst_bits, src_bits, bytespp);
|
|
400
|
+
dst_bits += bytespp;
|
|
401
|
+
src_bits += src_pitch;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
break;
|
|
408
|
+
case FIT_UINT16:
|
|
409
|
+
case FIT_RGB16:
|
|
410
|
+
case FIT_RGBA16:
|
|
411
|
+
case FIT_FLOAT:
|
|
412
|
+
case FIT_RGBF:
|
|
413
|
+
case FIT_RGBAF:
|
|
414
|
+
{
|
|
415
|
+
BYTE *bsrc = FreeImage_GetBits(src); // source pixels
|
|
416
|
+
BYTE *bdest = FreeImage_GetBits(dst); // destination pixels
|
|
417
|
+
|
|
418
|
+
// calculate the number of bytes per pixel
|
|
419
|
+
const unsigned bytespp = FreeImage_GetLine(src) / FreeImage_GetWidth(src);
|
|
420
|
+
|
|
421
|
+
for(unsigned y = 0; y < dst_height; y++) {
|
|
422
|
+
BYTE *src_bits = bsrc + (src_width - 1 - y) * bytespp;
|
|
423
|
+
BYTE *dst_bits = bdest + (y * dst_pitch);
|
|
424
|
+
for(unsigned x = 0; x < dst_width; x++) {
|
|
425
|
+
AssignPixel(dst_bits, src_bits, bytespp);
|
|
426
|
+
src_bits += src_pitch;
|
|
427
|
+
dst_bits += bytespp;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
return dst;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
Rotates an image by 180 degrees (counter clockwise).
|
|
439
|
+
Precise rotation, no filters required.
|
|
440
|
+
@param src Pointer to source image to rotate
|
|
441
|
+
@return Returns a pointer to a newly allocated rotated image if successful, returns NULL otherwise
|
|
442
|
+
*/
|
|
443
|
+
static FIBITMAP*
|
|
444
|
+
Rotate180(FIBITMAP *src) {
|
|
445
|
+
int x, y, k, pos;
|
|
446
|
+
|
|
447
|
+
const int bpp = FreeImage_GetBPP(src);
|
|
448
|
+
|
|
449
|
+
const int src_width = FreeImage_GetWidth(src);
|
|
450
|
+
const int src_height = FreeImage_GetHeight(src);
|
|
451
|
+
const int dst_width = src_width;
|
|
452
|
+
const int dst_height = src_height;
|
|
453
|
+
|
|
454
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(src);
|
|
455
|
+
|
|
456
|
+
FIBITMAP *dst = FreeImage_AllocateT(image_type, dst_width, dst_height, bpp);
|
|
457
|
+
if(NULL == dst) return NULL;
|
|
458
|
+
|
|
459
|
+
switch(image_type) {
|
|
460
|
+
case FIT_BITMAP:
|
|
461
|
+
if(bpp == 1) {
|
|
462
|
+
for(int y = 0; y < src_height; y++) {
|
|
463
|
+
BYTE *src_bits = FreeImage_GetScanLine(src, y);
|
|
464
|
+
BYTE *dst_bits = FreeImage_GetScanLine(dst, dst_height - y - 1);
|
|
465
|
+
for(int x = 0; x < src_width; x++) {
|
|
466
|
+
// get bit at (x, y)
|
|
467
|
+
k = (src_bits[x >> 3] & (0x80 >> (x & 0x07))) != 0;
|
|
468
|
+
// set bit at (dst_width - x - 1, dst_height - y - 1)
|
|
469
|
+
pos = dst_width - x - 1;
|
|
470
|
+
k ? dst_bits[pos >> 3] |= (0x80 >> (pos & 0x7)) : dst_bits[pos >> 3] &= (0xFF7F >> (pos & 0x7));
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
break;
|
|
474
|
+
}
|
|
475
|
+
// else if((bpp == 8) || (bpp == 24) || (bpp == 32)) FALL TROUGH
|
|
476
|
+
case FIT_UINT16:
|
|
477
|
+
case FIT_RGB16:
|
|
478
|
+
case FIT_RGBA16:
|
|
479
|
+
case FIT_FLOAT:
|
|
480
|
+
case FIT_RGBF:
|
|
481
|
+
case FIT_RGBAF:
|
|
482
|
+
{
|
|
483
|
+
// Calculate the number of bytes per pixel
|
|
484
|
+
const int bytespp = FreeImage_GetLine(src) / FreeImage_GetWidth(src);
|
|
485
|
+
|
|
486
|
+
for(y = 0; y < src_height; y++) {
|
|
487
|
+
BYTE *src_bits = FreeImage_GetScanLine(src, y);
|
|
488
|
+
BYTE *dst_bits = FreeImage_GetScanLine(dst, dst_height - y - 1) + (dst_width - 1) * bytespp;
|
|
489
|
+
for(x = 0; x < src_width; x++) {
|
|
490
|
+
// get pixel at (x, y)
|
|
491
|
+
// set pixel at (dst_width - x - 1, dst_height - y - 1)
|
|
492
|
+
AssignPixel(dst_bits, src_bits, bytespp);
|
|
493
|
+
src_bits += bytespp;
|
|
494
|
+
dst_bits -= bytespp;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
break;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
return dst;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
Rotates an image by 270 degrees (counter clockwise).
|
|
506
|
+
Precise rotation, no filters required.<br>
|
|
507
|
+
Code adapted from CxImage (http://www.xdp.it/cximage.htm)
|
|
508
|
+
@param src Pointer to source image to rotate
|
|
509
|
+
@return Returns a pointer to a newly allocated rotated image if successful, returns NULL otherwise
|
|
510
|
+
*/
|
|
511
|
+
static FIBITMAP*
|
|
512
|
+
Rotate270(FIBITMAP *src) {
|
|
513
|
+
int x2, dlineup;
|
|
514
|
+
|
|
515
|
+
const unsigned bpp = FreeImage_GetBPP(src);
|
|
516
|
+
|
|
517
|
+
const unsigned src_width = FreeImage_GetWidth(src);
|
|
518
|
+
const unsigned src_height = FreeImage_GetHeight(src);
|
|
519
|
+
const unsigned dst_width = src_height;
|
|
520
|
+
const unsigned dst_height = src_width;
|
|
521
|
+
|
|
522
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(src);
|
|
523
|
+
|
|
524
|
+
// allocate and clear dst image
|
|
525
|
+
FIBITMAP *dst = FreeImage_AllocateT(image_type, dst_width, dst_height, bpp);
|
|
526
|
+
if(NULL == dst) return NULL;
|
|
527
|
+
|
|
528
|
+
// get src and dst scan width
|
|
529
|
+
const unsigned src_pitch = FreeImage_GetPitch(src);
|
|
530
|
+
const unsigned dst_pitch = FreeImage_GetPitch(dst);
|
|
531
|
+
|
|
532
|
+
switch(image_type) {
|
|
533
|
+
case FIT_BITMAP:
|
|
534
|
+
if(bpp == 1) {
|
|
535
|
+
// speedy rotate for BW images
|
|
536
|
+
|
|
537
|
+
BYTE *bsrc = FreeImage_GetBits(src);
|
|
538
|
+
BYTE *bdest = FreeImage_GetBits(dst);
|
|
539
|
+
BYTE *dbitsmax = bdest + dst_height * dst_pitch - 1;
|
|
540
|
+
dlineup = 8 * dst_pitch - dst_width;
|
|
541
|
+
|
|
542
|
+
for(unsigned y = 0; y < src_height; y++) {
|
|
543
|
+
// figure out the column we are going to be copying to
|
|
544
|
+
const div_t div_r = div(y + dlineup, 8);
|
|
545
|
+
// set bit pos of src column byte
|
|
546
|
+
const BYTE bitpos = (BYTE)(1 << div_r.rem);
|
|
547
|
+
const BYTE *srcdisp = bsrc + y * src_pitch;
|
|
548
|
+
for(unsigned x = 0; x < src_pitch; x++) {
|
|
549
|
+
// get source bits
|
|
550
|
+
const BYTE *sbits = srcdisp + x;
|
|
551
|
+
// get destination column
|
|
552
|
+
BYTE *nrow = bdest + (x * 8) * dst_pitch + dst_pitch - 1 - div_r.quot;
|
|
553
|
+
for(unsigned z = 0; z < 8; z++) {
|
|
554
|
+
// get destination byte
|
|
555
|
+
BYTE *dbits = nrow + z * dst_pitch;
|
|
556
|
+
if ((dbits < bdest) || (dbits > dbitsmax)) break;
|
|
557
|
+
if (*sbits & (128 >> z)) *dbits |= bitpos;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
else if((bpp == 8) || (bpp == 24) || (bpp == 32)) {
|
|
563
|
+
// anything other than BW :
|
|
564
|
+
// This optimized version of rotation rotates image by smaller blocks. It is quite
|
|
565
|
+
// a bit faster than obvious algorithm, because it produces much less CPU cache misses.
|
|
566
|
+
// This optimization can be tuned by changing block size (RBLOCK). 96 is good value for current
|
|
567
|
+
// CPUs (tested on Athlon XP and Celeron D). Larger value (if CPU has enough cache) will increase
|
|
568
|
+
// speed somehow, but once you drop out of CPU's cache, things will slow down drastically.
|
|
569
|
+
// For older CPUs with less cache, lower value would yield better results.
|
|
570
|
+
|
|
571
|
+
BYTE *bsrc = FreeImage_GetBits(src); // source pixels
|
|
572
|
+
BYTE *bdest = FreeImage_GetBits(dst); // destination pixels
|
|
573
|
+
|
|
574
|
+
// Calculate the number of bytes per pixel (1 for 8-bit, 3 for 24-bit or 4 for 32-bit)
|
|
575
|
+
const unsigned bytespp = FreeImage_GetLine(src) / FreeImage_GetWidth(src);
|
|
576
|
+
|
|
577
|
+
// for all image blocks of RBLOCK*RBLOCK pixels
|
|
578
|
+
|
|
579
|
+
// x-segment
|
|
580
|
+
for(unsigned xs = 0; xs < dst_width; xs += RBLOCK) {
|
|
581
|
+
// y-segment
|
|
582
|
+
for(unsigned ys = 0; ys < dst_height; ys += RBLOCK) {
|
|
583
|
+
for(unsigned x = xs; x < MIN(dst_width, xs + RBLOCK); x++) { // do rotation
|
|
584
|
+
x2 = dst_width - x - 1;
|
|
585
|
+
// point to src pixel at (ys, x2)
|
|
586
|
+
BYTE *src_bits = bsrc + (x2 * src_pitch) + (ys * bytespp);
|
|
587
|
+
// point to dst pixel at (x, ys)
|
|
588
|
+
BYTE *dst_bits = bdest + (ys * dst_pitch) + (x * bytespp);
|
|
589
|
+
for(unsigned y = ys; y < MIN(dst_height, ys + RBLOCK); y++) {
|
|
590
|
+
// dst.SetPixel(x, y, src.GetPixel(y, x2));
|
|
591
|
+
AssignPixel(dst_bits, src_bits, bytespp);
|
|
592
|
+
src_bits += bytespp;
|
|
593
|
+
dst_bits += dst_pitch;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
break;
|
|
600
|
+
case FIT_UINT16:
|
|
601
|
+
case FIT_RGB16:
|
|
602
|
+
case FIT_RGBA16:
|
|
603
|
+
case FIT_FLOAT:
|
|
604
|
+
case FIT_RGBF:
|
|
605
|
+
case FIT_RGBAF:
|
|
606
|
+
{
|
|
607
|
+
BYTE *bsrc = FreeImage_GetBits(src); // source pixels
|
|
608
|
+
BYTE *bdest = FreeImage_GetBits(dst); // destination pixels
|
|
609
|
+
|
|
610
|
+
// calculate the number of bytes per pixel
|
|
611
|
+
const unsigned bytespp = FreeImage_GetLine(src) / FreeImage_GetWidth(src);
|
|
612
|
+
|
|
613
|
+
for(unsigned y = 0; y < dst_height; y++) {
|
|
614
|
+
BYTE *src_bits = bsrc + (src_height - 1) * src_pitch + y * bytespp;
|
|
615
|
+
BYTE *dst_bits = bdest + (y * dst_pitch);
|
|
616
|
+
for(unsigned x = 0; x < dst_width; x++) {
|
|
617
|
+
AssignPixel(dst_bits, src_bits, bytespp);
|
|
618
|
+
src_bits -= src_pitch;
|
|
619
|
+
dst_bits += bytespp;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
break;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
return dst;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/**
|
|
630
|
+
Rotates an image by a given degree in range [-45 .. +45] (counter clockwise)
|
|
631
|
+
using the 3-shear technique.
|
|
632
|
+
@param src Pointer to source image to rotate
|
|
633
|
+
@param dAngle Rotation angle
|
|
634
|
+
@return Returns a pointer to a newly allocated rotated image if successful, returns NULL otherwise
|
|
635
|
+
*/
|
|
636
|
+
static FIBITMAP*
|
|
637
|
+
Rotate45(FIBITMAP *src, double dAngle, const void *bkcolor) {
|
|
638
|
+
const double ROTATE_PI = double(3.1415926535897932384626433832795);
|
|
639
|
+
|
|
640
|
+
unsigned u;
|
|
641
|
+
|
|
642
|
+
const unsigned bpp = FreeImage_GetBPP(src);
|
|
643
|
+
|
|
644
|
+
const double dRadAngle = dAngle * ROTATE_PI / double(180); // Angle in radians
|
|
645
|
+
const double dSinE = sin(dRadAngle);
|
|
646
|
+
const double dTan = tan(dRadAngle / 2);
|
|
647
|
+
|
|
648
|
+
const unsigned src_width = FreeImage_GetWidth(src);
|
|
649
|
+
const unsigned src_height = FreeImage_GetHeight(src);
|
|
650
|
+
|
|
651
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(src);
|
|
652
|
+
|
|
653
|
+
// Calc first shear (horizontal) destination image dimensions
|
|
654
|
+
const unsigned width_1 = src_width + unsigned((double)src_height * fabs(dTan) + 0.5);
|
|
655
|
+
const unsigned height_1 = src_height;
|
|
656
|
+
|
|
657
|
+
// Perform 1st shear (horizontal)
|
|
658
|
+
// ----------------------------------------------------------------------
|
|
659
|
+
|
|
660
|
+
// Allocate image for 1st shear
|
|
661
|
+
FIBITMAP *dst1 = FreeImage_AllocateT(image_type, width_1, height_1, bpp);
|
|
662
|
+
if(NULL == dst1) {
|
|
663
|
+
return NULL;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
for(u = 0; u < height_1; u++) {
|
|
667
|
+
double dShear;
|
|
668
|
+
|
|
669
|
+
if(dTan >= 0) {
|
|
670
|
+
// Positive angle
|
|
671
|
+
dShear = (u + 0.5) * dTan;
|
|
672
|
+
}
|
|
673
|
+
else {
|
|
674
|
+
// Negative angle
|
|
675
|
+
dShear = (double(u) - height_1 + 0.5) * dTan;
|
|
676
|
+
}
|
|
677
|
+
int iShear = int(floor(dShear));
|
|
678
|
+
HorizontalSkew(src, dst1, u, iShear, dShear - double(iShear), bkcolor);
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
// Perform 2nd shear (vertical)
|
|
682
|
+
// ----------------------------------------------------------------------
|
|
683
|
+
|
|
684
|
+
// Calc 2nd shear (vertical) destination image dimensions
|
|
685
|
+
const unsigned width_2 = width_1;
|
|
686
|
+
unsigned height_2 = unsigned((double)src_width * fabs(dSinE) + (double)src_height * cos(dRadAngle) + 0.5) + 1;
|
|
687
|
+
|
|
688
|
+
// Allocate image for 2nd shear
|
|
689
|
+
FIBITMAP *dst2 = FreeImage_AllocateT(image_type, width_2, height_2, bpp);
|
|
690
|
+
if(NULL == dst2) {
|
|
691
|
+
FreeImage_Unload(dst1);
|
|
692
|
+
return NULL;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
double dOffset; // Variable skew offset
|
|
696
|
+
if(dSinE > 0) {
|
|
697
|
+
// Positive angle
|
|
698
|
+
dOffset = (src_width - 1.0) * dSinE;
|
|
699
|
+
}
|
|
700
|
+
else {
|
|
701
|
+
// Negative angle
|
|
702
|
+
dOffset = -dSinE * (double(src_width) - width_2);
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
for(u = 0; u < width_2; u++, dOffset -= dSinE) {
|
|
706
|
+
int iShear = int(floor(dOffset));
|
|
707
|
+
VerticalSkew(dst1, dst2, u, iShear, dOffset - double(iShear), bkcolor);
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// Perform 3rd shear (horizontal)
|
|
711
|
+
// ----------------------------------------------------------------------
|
|
712
|
+
|
|
713
|
+
// Free result of 1st shear
|
|
714
|
+
FreeImage_Unload(dst1);
|
|
715
|
+
|
|
716
|
+
// Calc 3rd shear (horizontal) destination image dimensions
|
|
717
|
+
const unsigned width_3 = unsigned(double(src_height) * fabs(dSinE) + double(src_width) * cos(dRadAngle) + 0.5) + 1;
|
|
718
|
+
const unsigned height_3 = height_2;
|
|
719
|
+
|
|
720
|
+
// Allocate image for 3rd shear
|
|
721
|
+
FIBITMAP *dst3 = FreeImage_AllocateT(image_type, width_3, height_3, bpp);
|
|
722
|
+
if(NULL == dst3) {
|
|
723
|
+
FreeImage_Unload(dst2);
|
|
724
|
+
return NULL;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
if(dSinE >= 0) {
|
|
728
|
+
// Positive angle
|
|
729
|
+
dOffset = (src_width - 1.0) * dSinE * -dTan;
|
|
730
|
+
}
|
|
731
|
+
else {
|
|
732
|
+
// Negative angle
|
|
733
|
+
dOffset = dTan * ( (src_width - 1.0) * -dSinE + (1.0 - height_3) );
|
|
734
|
+
}
|
|
735
|
+
for(u = 0; u < height_3; u++, dOffset += dTan) {
|
|
736
|
+
int iShear = int(floor(dOffset));
|
|
737
|
+
HorizontalSkew(dst2, dst3, u, iShear, dOffset - double(iShear), bkcolor);
|
|
738
|
+
}
|
|
739
|
+
// Free result of 2nd shear
|
|
740
|
+
FreeImage_Unload(dst2);
|
|
741
|
+
|
|
742
|
+
// Return result of 3rd shear
|
|
743
|
+
return dst3;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/**
|
|
747
|
+
Rotates a 1-, 8-, 24- or 32-bit image by a given angle (given in degree).
|
|
748
|
+
Angle is unlimited, except for 1-bit images (limited to integer multiples of 90 degree).
|
|
749
|
+
3-shears technique is used.
|
|
750
|
+
@param src Pointer to source image to rotate
|
|
751
|
+
@param dAngle Rotation angle
|
|
752
|
+
@return Returns a pointer to a newly allocated rotated image if successful, returns NULL otherwise
|
|
753
|
+
*/
|
|
754
|
+
static FIBITMAP*
|
|
755
|
+
RotateAny(FIBITMAP *src, double dAngle, const void *bkcolor) {
|
|
756
|
+
if(NULL == src) {
|
|
757
|
+
return NULL;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
FIBITMAP *image = src;
|
|
761
|
+
|
|
762
|
+
while(dAngle >= 360) {
|
|
763
|
+
// Bring angle to range of (-INF .. 360)
|
|
764
|
+
dAngle -= 360;
|
|
765
|
+
}
|
|
766
|
+
while(dAngle < 0) {
|
|
767
|
+
// Bring angle to range of [0 .. 360)
|
|
768
|
+
dAngle += 360;
|
|
769
|
+
}
|
|
770
|
+
if((dAngle > 45) && (dAngle <= 135)) {
|
|
771
|
+
// Angle in (45 .. 135]
|
|
772
|
+
// Rotate image by 90 degrees into temporary image,
|
|
773
|
+
// so it requires only an extra rotation angle
|
|
774
|
+
// of -45 .. +45 to complete rotation.
|
|
775
|
+
image = Rotate90(src);
|
|
776
|
+
dAngle -= 90;
|
|
777
|
+
}
|
|
778
|
+
else if((dAngle > 135) && (dAngle <= 225)) {
|
|
779
|
+
// Angle in (135 .. 225]
|
|
780
|
+
// Rotate image by 180 degrees into temporary image,
|
|
781
|
+
// so it requires only an extra rotation angle
|
|
782
|
+
// of -45 .. +45 to complete rotation.
|
|
783
|
+
image = Rotate180(src);
|
|
784
|
+
dAngle -= 180;
|
|
785
|
+
}
|
|
786
|
+
else if((dAngle > 225) && (dAngle <= 315)) {
|
|
787
|
+
// Angle in (225 .. 315]
|
|
788
|
+
// Rotate image by 270 degrees into temporary image,
|
|
789
|
+
// so it requires only an extra rotation angle
|
|
790
|
+
// of -45 .. +45 to complete rotation.
|
|
791
|
+
image = Rotate270(src);
|
|
792
|
+
dAngle -= 270;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
// If we got here, angle is in (-45 .. +45]
|
|
796
|
+
|
|
797
|
+
if(NULL == image) {
|
|
798
|
+
// Failed to allocate middle image
|
|
799
|
+
return NULL;
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
if(0 == dAngle) {
|
|
803
|
+
if(image == src) {
|
|
804
|
+
// Nothing to do ...
|
|
805
|
+
return FreeImage_Clone(src);
|
|
806
|
+
} else {
|
|
807
|
+
// No more rotation needed
|
|
808
|
+
return image;
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
else {
|
|
812
|
+
// Perform last rotation
|
|
813
|
+
FIBITMAP *dst = Rotate45(image, dAngle, bkcolor);
|
|
814
|
+
|
|
815
|
+
if(src != image) {
|
|
816
|
+
// Middle image was required, free it now.
|
|
817
|
+
FreeImage_Unload(image);
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
return dst;
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
// ==========================================================
|
|
825
|
+
|
|
826
|
+
FIBITMAP *DLL_CALLCONV
|
|
827
|
+
FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor) {
|
|
828
|
+
if(!FreeImage_HasPixels(dib)) return NULL;
|
|
829
|
+
|
|
830
|
+
if(0 == angle) {
|
|
831
|
+
return FreeImage_Clone(dib);
|
|
832
|
+
}
|
|
833
|
+
// DIB are stored upside down ...
|
|
834
|
+
angle *= -1;
|
|
835
|
+
|
|
836
|
+
try {
|
|
837
|
+
unsigned bpp = FreeImage_GetBPP(dib);
|
|
838
|
+
FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib);
|
|
839
|
+
|
|
840
|
+
switch(image_type) {
|
|
841
|
+
case FIT_BITMAP:
|
|
842
|
+
if(bpp == 1) {
|
|
843
|
+
// only rotate for integer multiples of 90 degree
|
|
844
|
+
if(fmod(angle, 90) != 0)
|
|
845
|
+
return NULL;
|
|
846
|
+
|
|
847
|
+
// perform the rotation
|
|
848
|
+
FIBITMAP *dst = RotateAny(dib, angle, bkcolor);
|
|
849
|
+
if(!dst) throw(1);
|
|
850
|
+
|
|
851
|
+
// build a greyscale palette
|
|
852
|
+
RGBQUAD *dst_pal = FreeImage_GetPalette(dst);
|
|
853
|
+
if(FreeImage_GetColorType(dib) == FIC_MINISBLACK) {
|
|
854
|
+
dst_pal[0].rgbRed = dst_pal[0].rgbGreen = dst_pal[0].rgbBlue = 0;
|
|
855
|
+
dst_pal[1].rgbRed = dst_pal[1].rgbGreen = dst_pal[1].rgbBlue = 255;
|
|
856
|
+
} else {
|
|
857
|
+
dst_pal[0].rgbRed = dst_pal[0].rgbGreen = dst_pal[0].rgbBlue = 255;
|
|
858
|
+
dst_pal[1].rgbRed = dst_pal[1].rgbGreen = dst_pal[1].rgbBlue = 0;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
// copy metadata from src to dst
|
|
862
|
+
FreeImage_CloneMetadata(dst, dib);
|
|
863
|
+
|
|
864
|
+
return dst;
|
|
865
|
+
}
|
|
866
|
+
else if((bpp == 8) || (bpp == 24) || (bpp == 32)) {
|
|
867
|
+
FIBITMAP *dst = RotateAny(dib, angle, bkcolor);
|
|
868
|
+
if(!dst) throw(1);
|
|
869
|
+
|
|
870
|
+
if(bpp == 8) {
|
|
871
|
+
// copy original palette to rotated bitmap
|
|
872
|
+
RGBQUAD *src_pal = FreeImage_GetPalette(dib);
|
|
873
|
+
RGBQUAD *dst_pal = FreeImage_GetPalette(dst);
|
|
874
|
+
memcpy(&dst_pal[0], &src_pal[0], 256 * sizeof(RGBQUAD));
|
|
875
|
+
|
|
876
|
+
// copy transparency table
|
|
877
|
+
FreeImage_SetTransparencyTable(dst, FreeImage_GetTransparencyTable(dib), FreeImage_GetTransparencyCount(dib));
|
|
878
|
+
|
|
879
|
+
// copy background color
|
|
880
|
+
RGBQUAD bkcolor;
|
|
881
|
+
if( FreeImage_GetBackgroundColor(dib, &bkcolor) ) {
|
|
882
|
+
FreeImage_SetBackgroundColor(dst, &bkcolor);
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
// copy metadata from src to dst
|
|
888
|
+
FreeImage_CloneMetadata(dst, dib);
|
|
889
|
+
|
|
890
|
+
return dst;
|
|
891
|
+
}
|
|
892
|
+
break;
|
|
893
|
+
case FIT_UINT16:
|
|
894
|
+
case FIT_RGB16:
|
|
895
|
+
case FIT_RGBA16:
|
|
896
|
+
case FIT_FLOAT:
|
|
897
|
+
case FIT_RGBF:
|
|
898
|
+
case FIT_RGBAF:
|
|
899
|
+
{
|
|
900
|
+
FIBITMAP *dst = RotateAny(dib, angle, bkcolor);
|
|
901
|
+
if(!dst) throw(1);
|
|
902
|
+
|
|
903
|
+
// copy metadata from src to dst
|
|
904
|
+
FreeImage_CloneMetadata(dst, dib);
|
|
905
|
+
|
|
906
|
+
return dst;
|
|
907
|
+
}
|
|
908
|
+
break;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
} catch(int) {
|
|
912
|
+
return NULL;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
return NULL;
|
|
916
|
+
}
|
|
917
|
+
|