--- a/Makefile.fip 2022-09-13 14:23:00.000000000 +0200 +++ b/Makefile.fip 2022-09-13 14:28:02.177207076 +0200 @@ -11,7 +11,7 @@ # Converts cr/lf to just lf DOS2UNIX = dos2unix -LIBRARIES = -lstdc++ -ljxrglue $(shell pkg-config --libs libjpeg libopenjp2 libpng libraw libtiff-4 libwebpmux OpenEXR zlib) -lm +LIBRARIES = -lstdc++ $(shell pkg-config --libs libjpeg libopenjp2 libpng libraw zlib) -lm MODULES = $(SRCS:.c=.o) MODULES := $(MODULES:.cpp=.o) --- a/Makefile.gnu 2022-09-13 14:23:00.000000000 +0200 +++ b/Makefile.gnu 2022-09-13 14:27:40.215833103 +0200 @@ -14,7 +14,7 @@ # See Bug-Debian #845279 PKG_CONFIG ?= pkg-config -LIBRARIES = -lstdc++ -ljxrglue $(shell $(PKG_CONFIG) --libs libjpeg libopenjp2 libpng libraw libtiff-4 libwebpmux OpenEXR zlib) -lm +LIBRARIES = -lstdc++ $(shell $(PKG_CONFIG) --libs libjpeg libopenjp2 libpng libraw zlib) -lm MODULES = $(SRCS:.c=.o) MODULES := $(MODULES:.cpp=.o) @@ -24,14 +24,14 @@ override CFLAGS += -DOPJ_STATIC # LibRaw override CFLAGS += -DNO_LCMS -# LibJXR + override CFLAGS += -DDISABLE_PERF_MEASUREMENT -D__ANSI__ -override CFLAGS += $(INCLUDE) -I/usr/include/jxrlib $(shell $(PKG_CONFIG) --cflags libjpeg libopenjp2 libpng libraw libtiff-4 libwebpmux OpenEXR zlib) +override CFLAGS += $(INCLUDE) $(shell $(PKG_CONFIG) --cflags libjpeg libopenjp2 libpng libraw zlib) CXXFLAGS ?= -O3 -fPIC override CXXFLAGS += -fexceptions -fvisibility=hidden -Wno-ctor-dtor-privacy -# LibJXR + override CXXFLAGS += -D__ANSI__ -override CXXFLAGS += $(INCLUDE) -I/usr/include/jxrlib $(shell $(PKG_CONFIG) --cflags libjpeg libopenjp2 libpng libraw libtiff-4 libwebpmux OpenEXR zlib) +override CXXFLAGS += $(INCLUDE) $(shell $(PKG_CONFIG) --cflags libjpeg libopenjp2 libpng libraw zlib) TARGET = freeimage STATICLIB = lib$(TARGET).a --- a/Makefile.srcs 2024-12-19 19:33:07.554120559 +0100 +++ b/Makefile.srcs 2024-12-19 19:36:01.988856257 +0100 @@ -1,5 +1,5 @@ VER_MAJOR = 3 VER_MINOR = 18.0 -SRCS = Source/FreeImage/BitmapAccess.cpp Source/FreeImage/CacheFile.cpp Source/FreeImage/ColorLookup.cpp Source/FreeImage/Conversion.cpp Source/FreeImage/Conversion16_555.cpp Source/FreeImage/Conversion16_565.cpp Source/FreeImage/Conversion24.cpp Source/FreeImage/Conversion32.cpp Source/FreeImage/Conversion4.cpp Source/FreeImage/Conversion8.cpp Source/FreeImage/ConversionFloat.cpp Source/FreeImage/ConversionRGB16.cpp Source/FreeImage/ConversionRGBA16.cpp Source/FreeImage/ConversionRGBAF.cpp Source/FreeImage/ConversionRGBF.cpp Source/FreeImage/ConversionType.cpp Source/FreeImage/ConversionUINT16.cpp Source/FreeImage/FreeImage.cpp Source/FreeImage/FreeImageC.c Source/FreeImage/FreeImageIO.cpp Source/FreeImage/Halftoning.cpp Source/FreeImage/J2KHelper.cpp Source/FreeImage/LFPQuantizer.cpp Source/FreeImage/MNGHelper.cpp Source/FreeImage/MemoryIO.cpp Source/FreeImage/MultiPage.cpp Source/FreeImage/NNQuantizer.cpp Source/FreeImage/PSDParser.cpp Source/FreeImage/PixelAccess.cpp Source/FreeImage/Plugin.cpp Source/FreeImage/PluginBMP.cpp Source/FreeImage/PluginCUT.cpp Source/FreeImage/PluginDDS.cpp Source/FreeImage/PluginEXR.cpp Source/FreeImage/PluginG3.cpp Source/FreeImage/PluginGIF.cpp Source/FreeImage/PluginHDR.cpp Source/FreeImage/PluginICO.cpp Source/FreeImage/PluginIFF.cpp Source/FreeImage/PluginJ2K.cpp Source/FreeImage/PluginJNG.cpp Source/FreeImage/PluginJP2.cpp Source/FreeImage/PluginJPEG.cpp Source/FreeImage/PluginJXR.cpp Source/FreeImage/PluginKOALA.cpp Source/FreeImage/PluginMNG.cpp Source/FreeImage/PluginPCD.cpp Source/FreeImage/PluginPCX.cpp Source/FreeImage/PluginPFM.cpp Source/FreeImage/PluginPICT.cpp Source/FreeImage/PluginPNG.cpp Source/FreeImage/PluginPNM.cpp Source/FreeImage/PluginPSD.cpp Source/FreeImage/PluginRAS.cpp Source/FreeImage/PluginRAW.cpp Source/FreeImage/PluginSGI.cpp Source/FreeImage/PluginTARGA.cpp Source/FreeImage/PluginTIFF.cpp Source/FreeImage/PluginWBMP.cpp Source/FreeImage/PluginWebP.cpp Source/FreeImage/PluginXBM.cpp Source/FreeImage/PluginXPM.cpp Source/FreeImage/TIFFLogLuv.cpp Source/FreeImage/ToneMapping.cpp Source/FreeImage/WuQuantizer.cpp Source/FreeImage/ZLibInterface.cpp Source/FreeImage/tmoColorConvert.cpp Source/FreeImage/tmoDrago03.cpp Source/FreeImage/tmoFattal02.cpp Source/FreeImage/tmoReinhard05.cpp Source/FreeImageToolkit/BSplineRotate.cpp Source/FreeImageToolkit/Background.cpp Source/FreeImageToolkit/Channels.cpp Source/FreeImageToolkit/ClassicRotate.cpp Source/FreeImageToolkit/Colors.cpp Source/FreeImageToolkit/CopyPaste.cpp Source/FreeImageToolkit/Display.cpp Source/FreeImageToolkit/Flip.cpp Source/FreeImageToolkit/MultigridPoissonSolver.cpp Source/FreeImageToolkit/Rescale.cpp Source/FreeImageToolkit/Resize.cpp Source/Metadata/Exif.cpp Source/Metadata/FIRational.cpp Source/Metadata/FreeImageTag.cpp Source/Metadata/IPTC.cpp Source/Metadata/TagConversion.cpp Source/Metadata/TagLib.cpp Source/Metadata/XTIFF.cpp +SRCS = Source/FreeImage/BitmapAccess.cpp Source/FreeImage/CacheFile.cpp Source/FreeImage/ColorLookup.cpp Source/FreeImage/Conversion.cpp Source/FreeImage/Conversion16_555.cpp Source/FreeImage/Conversion16_565.cpp Source/FreeImage/Conversion24.cpp Source/FreeImage/Conversion32.cpp Source/FreeImage/Conversion4.cpp Source/FreeImage/Conversion8.cpp Source/FreeImage/ConversionFloat.cpp Source/FreeImage/ConversionRGB16.cpp Source/FreeImage/ConversionRGBA16.cpp Source/FreeImage/ConversionRGBAF.cpp Source/FreeImage/ConversionRGBF.cpp Source/FreeImage/ConversionType.cpp Source/FreeImage/ConversionUINT16.cpp Source/FreeImage/FreeImage.cpp Source/FreeImage/FreeImageC.c Source/FreeImage/FreeImageIO.cpp Source/FreeImage/GetType.cpp Source/FreeImage/Halftoning.cpp Source/FreeImage/J2KHelper.cpp Source/FreeImage/LFPQuantizer.cpp Source/FreeImage/MNGHelper.cpp Source/FreeImage/MemoryIO.cpp Source/FreeImage/MultiPage.cpp Source/FreeImage/NNQuantizer.cpp Source/FreeImage/PSDParser.cpp Source/FreeImage/PixelAccess.cpp Source/FreeImage/Plugin.cpp Source/FreeImage/PluginBMP.cpp Source/FreeImage/PluginCUT.cpp Source/FreeImage/PluginDDS.cpp Source/FreeImage/PluginG3.cpp Source/FreeImage/PluginGIF.cpp Source/FreeImage/PluginHDR.cpp Source/FreeImage/PluginICO.cpp Source/FreeImage/PluginIFF.cpp Source/FreeImage/PluginJ2K.cpp Source/FreeImage/PluginJNG.cpp Source/FreeImage/PluginJP2.cpp Source/FreeImage/PluginJPEG.cpp Source/FreeImage/PluginKOALA.cpp Source/FreeImage/PluginMNG.cpp Source/FreeImage/PluginPCD.cpp Source/FreeImage/PluginPCX.cpp Source/FreeImage/PluginPFM.cpp Source/FreeImage/PluginPICT.cpp Source/FreeImage/PluginPNG.cpp Source/FreeImage/PluginPNM.cpp Source/FreeImage/PluginPSD.cpp Source/FreeImage/PluginRAS.cpp Source/FreeImage/PluginRAW.cpp Source/FreeImage/PluginSGI.cpp Source/FreeImage/PluginTARGA.cpp Source/FreeImage/PluginWBMP.cpp Source/FreeImage/PluginXBM.cpp Source/FreeImage/PluginXPM.cpp Source/FreeImage/ToneMapping.cpp Source/FreeImage/WuQuantizer.cpp Source/FreeImage/ZLibInterface.cpp Source/FreeImage/tmoColorConvert.cpp Source/FreeImage/tmoDrago03.cpp Source/FreeImage/tmoFattal02.cpp Source/FreeImage/tmoReinhard05.cpp Source/FreeImageToolkit/BSplineRotate.cpp Source/FreeImageToolkit/Background.cpp Source/FreeImageToolkit/Channels.cpp Source/FreeImageToolkit/ClassicRotate.cpp Source/FreeImageToolkit/Colors.cpp Source/FreeImageToolkit/CopyPaste.cpp Source/FreeImageToolkit/Display.cpp Source/FreeImageToolkit/Flip.cpp Source/FreeImageToolkit/MultigridPoissonSolver.cpp Source/FreeImageToolkit/Rescale.cpp Source/FreeImageToolkit/Resize.cpp Source/Metadata/Exif.cpp Source/Metadata/FIRational.cpp Source/Metadata/FreeImageTag.cpp Source/Metadata/IPTC.cpp Source/Metadata/TagConversion.cpp Source/Metadata/TagLib.cpp INCLS = Source/CacheFile.h Source/FreeImage.h Source/FreeImage/J2KHelper.h Source/FreeImage/PSDParser.h Source/FreeImageIO.h Source/FreeImageToolkit/Filters.h Source/FreeImageToolkit/Resize.h Source/MapIntrospector.h Source/Metadata/FIRational.h Source/Metadata/FreeImageTag.h Source/Plugin.h Source/Quantizers.h Source/ToneMapping.h Source/Utilities.h -INCLUDE = -I. -ISource -ISource/Metadata -ISource/FreeImageToolkit -ISource/LibJPEG -ISource/LibPNG -ISource/LibTIFF4 -ISource/ZLib -ISource/LibOpenJPEG -ISource/OpenEXR -ISource/OpenEXR/Half -ISource/OpenEXR/Iex -ISource/OpenEXR/IlmImf -ISource/OpenEXR/IlmThread -ISource/OpenEXR/Imath -ISource/OpenEXR/IexMath -ISource/LibRawLite -ISource/LibRawLite/dcraw -ISource/LibRawLite/internal -ISource/LibRawLite/libraw -ISource/LibRawLite/src -ISource/LibWebP -ISource/LibJXR -ISource/LibJXR/common/include -ISource/LibJXR/image/sys -ISource/LibJXR/jxrgluelib +INCLUDE = -I. -ISource -ISource/Metadata -ISource/FreeImageToolkit -ISource/LibJPEG -ISource/LibPNG -ISource/ZLib -ISource/LibOpenJPEG -ISource/LibRawLite -ISource/LibRawLite/dcraw -ISource/LibRawLite/internal -ISource/LibRawLite/libraw -ISource/LibRawLite/src --- a/Source/FreeImage/Plugin.cpp 2017-02-18 16:09:28.000000000 +0100 +++ b/Source/FreeImage/Plugin.cpp 2024-12-19 19:03:31.000000000 +0100 @@ -254,27 +254,20 @@ s_plugins->AddNode(InitPNM, NULL, "PPMRAW", "Portable Pixelmap (RAW)", "ppm", "^P6"); s_plugins->AddNode(InitRAS); s_plugins->AddNode(InitTARGA); - s_plugins->AddNode(InitTIFF); s_plugins->AddNode(InitWBMP); s_plugins->AddNode(InitPSD); s_plugins->AddNode(InitCUT); s_plugins->AddNode(InitXBM); s_plugins->AddNode(InitXPM); s_plugins->AddNode(InitDDS); - s_plugins->AddNode(InitGIF); - s_plugins->AddNode(InitHDR); - s_plugins->AddNode(InitG3); + s_plugins->AddNode(InitGIF); + s_plugins->AddNode(InitHDR); s_plugins->AddNode(InitSGI); - s_plugins->AddNode(InitEXR); s_plugins->AddNode(InitJ2K); s_plugins->AddNode(InitJP2); s_plugins->AddNode(InitPFM); s_plugins->AddNode(InitPICT); s_plugins->AddNode(InitRAW); - s_plugins->AddNode(InitWEBP); -#if !(defined(_MSC_VER) && (_MSC_VER <= 1310)) - s_plugins->AddNode(InitJXR); -#endif // unsupported by MS Visual Studio 2003 !!! // external plugin initialization --- a/Source/FreeImage.h 2024-12-19 19:05:24.238963346 +0100 +++ b/Source/FreeImage.h 2024-12-19 19:04:39.000000000 +0100 @@ -403,7 +403,6 @@ FIF_PPMRAW = 15, FIF_RAS = 16, FIF_TARGA = 17, - FIF_TIFF = 18, FIF_WBMP = 19, FIF_PSD = 20, FIF_CUT = 21, @@ -412,16 +411,12 @@ FIF_DDS = 24, FIF_GIF = 25, FIF_HDR = 26, - FIF_FAXG3 = 27, FIF_SGI = 28, - FIF_EXR = 29, FIF_J2K = 30, FIF_JP2 = 31, FIF_PFM = 32, FIF_PICT = 33, - FIF_RAW = 34, - FIF_WEBP = 35, - FIF_JXR = 36 + FIF_RAW = 34 }; /** Image type used in FreeImage. @@ -678,15 +673,6 @@ #define BMP_SAVE_RLE 1 #define CUT_DEFAULT 0 #define DDS_DEFAULT 0 -#define EXR_DEFAULT 0 //! save data as half with piz-based wavelet compression -#define EXR_FLOAT 0x0001 //! save data as float instead of as half (not recommended) -#define EXR_NONE 0x0002 //! save with no compression -#define EXR_ZIP 0x0004 //! save with zlib compression, in blocks of 16 scan lines -#define EXR_PIZ 0x0008 //! save with piz-based wavelet compression -#define EXR_PXR24 0x0010 //! save with lossy 24-bit float compression -#define EXR_B44 0x0020 //! save with lossy 44% float compression - goes to 22% when combined with EXR_LC -#define EXR_LC 0x0040 //! save images with one luminance and two chroma channels, rather than as RGB (lossy compression) -#define FAXG3_DEFAULT 0 #define GIF_DEFAULT 0 #define GIF_LOAD256 1 //! load the image as a 256 color image with ununsed palette entries, if it's 16 or 2 color #define GIF_PLAYBACK 2 //! 'Play' the GIF to generate each frame (as 32bpp) instead of returning raw frame data when loading @@ -750,25 +736,9 @@ #define TARGA_DEFAULT 0 #define TARGA_LOAD_RGB888 1 //! if set the loader converts RGB555 and ARGB8888 -> RGB888. #define TARGA_SAVE_RLE 2 //! if set, the writer saves with RLE compression -#define TIFF_DEFAULT 0 -#define TIFF_CMYK 0x0001 //! reads/stores tags for separated CMYK (use | to combine with compression flags) -#define TIFF_PACKBITS 0x0100 //! save using PACKBITS compression -#define TIFF_DEFLATE 0x0200 //! save using DEFLATE compression (a.k.a. ZLIB compression) -#define TIFF_ADOBE_DEFLATE 0x0400 //! save using ADOBE DEFLATE compression -#define TIFF_NONE 0x0800 //! save without any compression -#define TIFF_CCITTFAX3 0x1000 //! save using CCITT Group 3 fax encoding -#define TIFF_CCITTFAX4 0x2000 //! save using CCITT Group 4 fax encoding -#define TIFF_LZW 0x4000 //! save using LZW compression -#define TIFF_JPEG 0x8000 //! save using JPEG compression -#define TIFF_LOGLUV 0x10000 //! save using LogLuv compression #define WBMP_DEFAULT 0 #define XBM_DEFAULT 0 #define XPM_DEFAULT 0 -#define WEBP_DEFAULT 0 //! save with good quality (75:1) -#define WEBP_LOSSLESS 0x100 //! save in lossless mode -#define JXR_DEFAULT 0 //! save with quality 80 and no chroma subsampling (4:4:4) -#define JXR_LOSSLESS 0x0064 //! save lossless -#define JXR_PROGRESSIVE 0x2000 //! save as a progressive-JXR (use | to combine with other save flags) // Background filling options --------------------------------------------------------- // Constants used in FreeImage_FillBackground and FreeImage_EnlargeCanvas --- a/Source/Plugin.h 2017-02-18 16:09:28.000000000 +0100 +++ b/Source/Plugin.h 2024-12-19 19:04:54.000000000 +0100 @@ -122,23 +122,18 @@ void DLL_CALLCONV InitPSD(Plugin *plugin, int format_id); void DLL_CALLCONV InitRAS(Plugin *plugin, int format_id); void DLL_CALLCONV InitTARGA(Plugin *plugin, int format_id); -void DLL_CALLCONV InitTIFF(Plugin *plugin, int format_id); void DLL_CALLCONV InitWBMP(Plugin *plugin, int format_id); void DLL_CALLCONV InitXBM(Plugin *plugin, int format_id); void DLL_CALLCONV InitXPM(Plugin *plugin, int format_id); void DLL_CALLCONV InitDDS(Plugin *plugin, int format_id); void DLL_CALLCONV InitGIF(Plugin *plugin, int format_id); void DLL_CALLCONV InitHDR(Plugin *plugin, int format_id); -void DLL_CALLCONV InitG3(Plugin *plugin, int format_id); void DLL_CALLCONV InitSGI(Plugin *plugin, int format_id); -void DLL_CALLCONV InitEXR(Plugin *plugin, int format_id); void DLL_CALLCONV InitJ2K(Plugin *plugin, int format_id); void DLL_CALLCONV InitJP2(Plugin *plugin, int format_id); void DLL_CALLCONV InitPFM(Plugin *plugin, int format_id); void DLL_CALLCONV InitPICT(Plugin *plugin, int format_id); void DLL_CALLCONV InitRAW(Plugin *plugin, int format_id); void DLL_CALLCONV InitJNG(Plugin *plugin, int format_id); -void DLL_CALLCONV InitWEBP(Plugin *plugin, int format_id); -void DLL_CALLCONV InitJXR(Plugin *plugin, int format_id); #endif //!PLUGIN_H --- /dev/null 2024-11-01 21:59:53.158793231 +0100 +++ b/Source/FreeImage/GetType.cpp 2024-12-19 19:30:44.660241140 +0100 @@ -0,0 +1,163 @@ +// ========================================================== +// GetType / Validate +// +// Design and implementation by +// - Floris van den Berg (flvdberg@wxs.nl) +// - Hervé Drolon (drolon@infonie.fr) +// +// This file is part of FreeImage 3 +// +// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY +// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES +// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE +// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED +// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT +// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY +// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL +// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER +// THIS DISCLAIMER. +// +// Use at your own risk! +// ========================================================== + +#ifdef _MSC_VER +#pragma warning (disable : 4786) // identifier was truncated to 'number' characters +#endif + +#include "FreeImage.h" +#include "Utilities.h" +#include "FreeImageIO.h" +#include "Plugin.h" + +// ===================================================================== +// Generic stream file type access +// ===================================================================== + +FREE_IMAGE_FORMAT DLL_CALLCONV +FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size) { + if (handle != NULL) { + int fif_count = FreeImage_GetFIFCount(); + + for (int i = 0; i < fif_count; ++i) { + FREE_IMAGE_FORMAT fif = (FREE_IMAGE_FORMAT)i; + if (FreeImage_ValidateFIF(fif, io, handle)) { + // many camera raw files use a TIFF signature ... + // ... try to revalidate against FIF_RAW (even if it breaks the code genericity) + if (FreeImage_ValidateFIF(FIF_RAW, io, handle)) { + return FIF_RAW; + } + return fif; + } + } + } + + return FIF_UNKNOWN; +} + +// ===================================================================== +// File stream file type access +// ===================================================================== + +FREE_IMAGE_FORMAT DLL_CALLCONV +FreeImage_GetFileType(const char *filename, int size) { + FreeImageIO io; + SetDefaultIO(&io); + + FILE *handle = fopen(filename, "rb"); + + if (handle != NULL) { + FREE_IMAGE_FORMAT format = FreeImage_GetFileTypeFromHandle(&io, (fi_handle)handle, size); + + fclose(handle); + + return format; + } + + return FIF_UNKNOWN; +} + +FREE_IMAGE_FORMAT DLL_CALLCONV +FreeImage_GetFileTypeU(const wchar_t *filename, int size) { +#ifdef _WIN32 + FreeImageIO io; + SetDefaultIO(&io); + FILE *handle = _wfopen(filename, L"rb"); + + if (handle != NULL) { + FREE_IMAGE_FORMAT format = FreeImage_GetFileTypeFromHandle(&io, (fi_handle)handle, size); + + fclose(handle); + + return format; + } +#endif + return FIF_UNKNOWN; +} + +// ===================================================================== +// Memory stream file type access +// ===================================================================== + +FREE_IMAGE_FORMAT DLL_CALLCONV +FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size) { + FreeImageIO io; + SetMemoryIO(&io); + + if (stream != NULL) { + return FreeImage_GetFileTypeFromHandle(&io, (fi_handle)stream, size); + } + + return FIF_UNKNOWN; +} + +// -------------------------------------------------------------------------- + +BOOL DLL_CALLCONV +FreeImage_ValidateFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle) { + return FreeImage_ValidateFIF(fif, io, handle); +} + +BOOL DLL_CALLCONV +FreeImage_Validate(FREE_IMAGE_FORMAT fif, const char *filename) { + FreeImageIO io; + SetDefaultIO(&io); + + FILE *handle = fopen(filename, "rb"); + + if (handle != NULL) { + BOOL bIsValidFIF = FreeImage_ValidateFromHandle(fif, &io, (fi_handle)handle); + fclose(handle); + return bIsValidFIF; + } + + return FALSE; +} + +BOOL DLL_CALLCONV +FreeImage_ValidateU(FREE_IMAGE_FORMAT fif, const wchar_t *filename) { +#ifdef _WIN32 + FreeImageIO io; + SetDefaultIO(&io); + FILE *handle = _wfopen(filename, L"rb"); + + if (handle != NULL) { + BOOL bIsValidFIF = FreeImage_ValidateFromHandle(fif, &io, (fi_handle)handle); + fclose(handle); + return bIsValidFIF; + } +#endif + return FALSE; +} + +BOOL DLL_CALLCONV +FreeImage_ValidateFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream) { + FreeImageIO io; + SetMemoryIO(&io); + + if (stream != NULL) { + BOOL bIsValidFIF = FreeImage_ValidateFromHandle(fif, &io, (fi_handle)stream); + return bIsValidFIF; + } + + return FALSE; +}