]> git.sesse.net Git - casparcg/blob - core/producer/image/image_loader.cpp
0bf56306f5c2a8274d3e77ce64a29a83b566b985
[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 #include "../../frame/gpu_frame.h"\r
8 #include "../../../common/image/image.h"\r
9 \r
10 #if defined(_MSC_VER)\r
11 #pragma warning (disable : 4714) // marked as __forceinline not inlined\r
12 #endif\r
13 \r
14 #include <boost/filesystem.hpp>\r
15 #include <boost/exception/errinfo_file_name.hpp>\r
16 \r
17 namespace caspar{ namespace image{\r
18 \r
19 std::shared_ptr<FIBITMAP> load_image(const std::string& filename)\r
20 {\r
21         if(!boost::filesystem::exists(filename))\r
22                 BOOST_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(filename));\r
23 \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
28                 \r
29         if(fif == FIF_UNKNOWN || !FreeImage_FIFSupportsReading(fif)) \r
30                 BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));\r
31                 \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
34                   \r
35         if(FreeImage_GetBPP(bitmap.get()) != 32)\r
36         {\r
37                 bitmap = std::shared_ptr<FIBITMAP>(FreeImage_ConvertTo32Bits(bitmap.get()), FreeImage_Unload);\r
38                 if(!bitmap)\r
39                         BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));                     \r
40         }\r
41         \r
42         return bitmap;\r
43 }\r
44 \r
45 std::shared_ptr<FIBITMAP> load_image(const std::wstring& filename)\r
46 {\r
47         return load_image(common::narrow(filename));\r
48 }\r
49 \r
50 }}