1 #include "..\..\StdAfx.h"
\r
3 #include "image_loader.h"
\r
5 #include "../../../common/exception/Exceptions.h"
\r
7 #include "../../frame/gpu_frame.h"
\r
8 #include "../../../common/image/image.h"
\r
10 #if defined(_MSC_VER)
\r
11 #pragma warning (disable : 4714) // marked as __forceinline not inlined
\r
14 #include <boost/filesystem.hpp>
\r
15 #include <boost/exception/errinfo_file_name.hpp>
\r
17 namespace caspar{ namespace image{
\r
19 std::shared_ptr<FIBITMAP> load_image(const std::string& filename)
\r
21 if(!boost::filesystem::exists(filename))
\r
22 BOOST_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(filename));
\r
24 FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
\r
25 fif = FreeImage_GetFileType(filename.c_str(), 0);
\r
26 if(fif == FIF_UNKNOWN)
\r
27 fif = FreeImage_GetFIFFromFilename(filename.c_str());
\r
29 if(fif == FIF_UNKNOWN || !FreeImage_FIFSupportsReading(fif))
\r
30 BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));
\r
32 auto bitmap = std::shared_ptr<FIBITMAP>(FreeImage_Load(fif, filename.c_str(), 0), FreeImage_Unload);
\r
33 //FREE_IMAGE_TYPE ImageType = FreeImage_GetImageType(bitmap.get());
\r
35 if(FreeImage_GetBPP(bitmap.get()) != 32)
\r
37 bitmap = std::shared_ptr<FIBITMAP>(FreeImage_ConvertTo32Bits(bitmap.get()), FreeImage_Unload);
\r
39 BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));
\r
45 std::shared_ptr<FIBITMAP> load_image(const std::wstring& filename)
\r
47 return load_image(common::narrow(filename));
\r