]> git.sesse.net Git - casparcg/commitdiff
Add support for loading png from memory
authorHelge Norberg <helge.norberg@svt.se>
Fri, 12 Apr 2013 07:28:17 +0000 (09:28 +0200)
committerHelge Norberg <helge.norberg@svt.se>
Fri, 12 Apr 2013 07:28:17 +0000 (09:28 +0200)
modules/image/util/image_loader.cpp
modules/image/util/image_loader.h

index c876edc716150d4316ab2f337ed632f8f1d99f56..ad3ba198f5a0349b3b47f68bf235badf4e782165 100644 (file)
@@ -63,4 +63,24 @@ std::shared_ptr<FIBITMAP> load_image(const std::string& filename)
        return load_image(widen(filename));\r
 }\r
 \r
+std::shared_ptr<FIBITMAP> load_png_from_memory(const void* memory_location, size_t size)\r
+{\r
+       FREE_IMAGE_FORMAT fif = FIF_PNG;\r
+\r
+       auto memory = std::unique_ptr<FIMEMORY, decltype(&FreeImage_CloseMemory)>(\r
+                       FreeImage_OpenMemory(static_cast<BYTE*>(const_cast<void*>(memory_location)), size),\r
+                       FreeImage_CloseMemory);\r
+       auto bitmap = std::shared_ptr<FIBITMAP>(FreeImage_LoadFromMemory(fif, memory.get(), 0), FreeImage_Unload);\r
+\r
+       if (FreeImage_GetBPP(bitmap.get()) != 32)\r
+       {\r
+               bitmap = std::shared_ptr<FIBITMAP>(FreeImage_ConvertTo32Bits(bitmap.get()), FreeImage_Unload);\r
+\r
+               if (!bitmap)\r
+                       BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));\r
+       }\r
+\r
+       return bitmap;\r
+}\r
+\r
 }}
\ No newline at end of file
index face6479cb8435ed1998aaa21d2f04a399979455..18cd5bcff9713b37918cc09bd52c36d6a16f4561 100644 (file)
@@ -30,5 +30,6 @@ namespace caspar { namespace image {
 \r
 std::shared_ptr<FIBITMAP> load_image(const std::string& filename);\r
 std::shared_ptr<FIBITMAP> load_image(const std::wstring& filename);\r
+std::shared_ptr<FIBITMAP> load_png_from_memory(const void* memory_location, size_t size);\r
 \r
 }}\r