]> git.sesse.net Git - casparcg/blob - core/producer/image/image_loader.cpp
2.0.0.2: Disabled unused STENCIL_TEST.
[casparcg] / core / producer / image / image_loader.cpp
1 #include "..\..\StdAfx.h"\r
2 \r
3 #include "image_loader.h"\r
4 \r
5 #include <common/exception/Exceptions.h>\r
6 \r
7 #if defined(_MSC_VER)\r
8 #pragma warning (disable : 4714) // marked as __forceinline not inlined\r
9 #endif\r
10 \r
11 #include <boost/filesystem.hpp>\r
12 #include <boost/exception/errinfo_file_name.hpp>\r
13 \r
14 namespace caspar { namespace core { namespace image{\r
15 \r
16 struct FreeImage_initializer\r
17 {\r
18         FreeImage_initializer(){FreeImage_Initialise(true);}\r
19         ~FreeImage_initializer(){FreeImage_DeInitialise();}\r
20 } init;\r
21 \r
22 std::shared_ptr<FIBITMAP> load_image(const std::string& filename)\r
23 {\r
24         if(!boost::filesystem::exists(filename))\r
25                 BOOST_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(filename));\r
26 \r
27         FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;\r
28         fif = FreeImage_GetFileType(filename.c_str(), 0);\r
29         if(fif == FIF_UNKNOWN) \r
30                 fif = FreeImage_GetFIFFromFilename(filename.c_str());\r
31                 \r
32         if(fif == FIF_UNKNOWN || !FreeImage_FIFSupportsReading(fif)) \r
33                 BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));\r
34                 \r
35         auto bitmap = std::shared_ptr<FIBITMAP>(FreeImage_Load(fif, filename.c_str(), 0), FreeImage_Unload);\r
36                   \r
37         if(FreeImage_GetBPP(bitmap.get()) != 32)\r
38         {\r
39                 bitmap = std::shared_ptr<FIBITMAP>(FreeImage_ConvertTo32Bits(bitmap.get()), FreeImage_Unload);\r
40                 if(!bitmap)\r
41                         BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));                     \r
42         }\r
43         \r
44         return bitmap;\r
45 }\r
46 \r
47 std::shared_ptr<FIBITMAP> load_image(const std::wstring& filename)\r
48 {\r
49         return load_image(narrow(filename));\r
50 }\r
51 \r
52 }}}