]> git.sesse.net Git - casparcg/commitdiff
Fixed issue #23 concerning alpha in PNG-images
authornirklas <nirklas@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 5 Apr 2013 13:29:52 +0000 (13:29 +0000)
committerTomKaltz <tomkaltz@gmail.com>
Mon, 8 Apr 2013 22:08:44 +0000 (18:08 -0400)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@3801 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/image/image.vcxproj
modules/image/image.vcxproj.filters
modules/image/producer/image_producer.cpp
modules/image/util/image_algorithms.cpp [new file with mode: 0644]
modules/image/util/image_algorithms.h
modules/image/util/image_loader.cpp

index e539957463e39aadbf2650ecfcb0fe354be32b51..66ac30a68b5d09daed7f3e5912ad53be3614306f 100644 (file)
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
     </ClCompile>\r
     <ClCompile Include="producer\image_scroll_producer.cpp" />\r
+    <ClCompile Include="util\image_algorithms.cpp" />\r
     <ClCompile Include="util\image_loader.cpp" />\r
   </ItemGroup>\r
   <ItemGroup>\r
index 05665fc739f4d5f69ab3a1c064899501efa46e50..82f2abe37163b40bb0944ac540f66df2dc1c6a22 100644 (file)
@@ -30,6 +30,9 @@
     <ClCompile Include="consumer\image_consumer.cpp">\r
       <Filter>source\consumer</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="util\image_algorithms.cpp">\r
+      <Filter>source\util</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="producer\image_producer.h">\r
index 0f562bc2ce17a61c54932b36abfd269aadcc7ea5..192a5304a0fcc4cd824fb9b6c8f64979fcf9b2f4 100644 (file)
@@ -53,7 +53,7 @@ struct image_producer : public core::frame_producer
        {\r
                auto bitmap = load_image(filename_);\r
                FreeImage_FlipVertical(bitmap.get());\r
-               \r
+\r
                core::pixel_format_desc desc;\r
                desc.pix_fmt = core::pixel_format::bgra;\r
                desc.planes.push_back(core::pixel_format_desc::plane(FreeImage_GetWidth(bitmap.get()), FreeImage_GetHeight(bitmap.get()), 4));\r
diff --git a/modules/image/util/image_algorithms.cpp b/modules/image/util/image_algorithms.cpp
new file mode 100644 (file)
index 0000000..a5630e1
--- /dev/null
@@ -0,0 +1,27 @@
+#include <vector>\r
+#include <stdint.h>\r
+#include "../util/image_algorithms.h"\r
+\r
+namespace caspar { namespace image {\r
+\r
+std::vector<std::pair<int, int>> get_line_points(int num_pixels, double angle_radians)\r
+{\r
+       std::vector<std::pair<int, int>> line_points;\r
+       line_points.reserve(num_pixels);\r
+\r
+       double delta_x = std::cos(angle_radians);\r
+       double delta_y = -std::sin(angle_radians); // In memory is revered\r
+       double max_delta = std::max(std::abs(delta_x), std::abs(delta_y));\r
+       double amplification = 1.0 / max_delta;\r
+       delta_x *= amplification;\r
+       delta_y *= amplification;\r
+\r
+       for (int i = 1; i <= num_pixels; ++i)\r
+               line_points.push_back(std::make_pair(\r
+                       static_cast<int>(std::floor(delta_x * static_cast<double>(i) + 0.5)), \r
+                       static_cast<int>(std::floor(delta_y * static_cast<double>(i) + 0.5))));\r
+\r
+       return std::move(line_points);\r
+}\r
+\r
+}}     //namespace caspar::image
\ No newline at end of file
index 22845d4a57d59e17a823277db4d8cdcb18c028d5..08559fc396c0e1e83599fdbb31affe06df8b195c 100644 (file)
@@ -150,25 +150,7 @@ void blur(
  *\r
  * @return the x-y pairs.\r
  */\r
-std::vector<std::pair<int, int>> get_line_points(int num_pixels, double angle_radians)\r
-{\r
-       std::vector<std::pair<int, int>> line_points;\r
-       line_points.reserve(num_pixels);\r
-\r
-       double delta_x = std::cos(angle_radians);\r
-       double delta_y = -std::sin(angle_radians); // In memory is revered\r
-       double max_delta = std::max(std::abs(delta_x), std::abs(delta_y));\r
-       double amplification = 1.0 / max_delta;\r
-       delta_x *= amplification;\r
-       delta_y *= amplification;\r
-\r
-       for (int i = 1; i <= num_pixels; ++i)\r
-               line_points.push_back(std::make_pair(\r
-                       static_cast<int>(std::floor(delta_x * static_cast<double>(i) + 0.5)), \r
-                       static_cast<int>(std::floor(delta_y * static_cast<double>(i) + 0.5))));\r
-\r
-       return std::move(line_points);\r
-}\r
+std::vector<std::pair<int, int>> get_line_points(int num_pixels, double angle_radians);\r
 \r
 /**\r
  * Directionally blur a source image modelling the ImageView concept and store\r
index c876edc716150d4316ab2f337ed632f8f1d99f56..1ac1674fee0ab1b9106da0e9958a0266f42a120c 100644 (file)
@@ -31,6 +31,9 @@
 #include <boost/exception/errinfo_file_name.hpp>\r
 #include <boost/filesystem.hpp>\r
 \r
+#include "image_algorithms.h"\r
+#include "image_view.h"\r
+\r
 namespace caspar { namespace image {\r
 \r
 std::shared_ptr<FIBITMAP> load_image(const std::wstring& filename)\r
@@ -54,6 +57,13 @@ std::shared_ptr<FIBITMAP> load_image(const std::wstring& filename)
                if(!bitmap)\r
                        BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));                     \r
        }\r
+\r
+       //PNG-images need to be premultiplied with their alpha\r
+       if(fif == FIF_PNG)\r
+       {\r
+               image_view<bgra_pixel> original_view(FreeImage_GetBits(bitmap.get()), FreeImage_GetWidth(bitmap.get()), FreeImage_GetHeight(bitmap.get()));\r
+               premultiply(original_view);\r
+       }\r
        \r
        return bitmap;\r
 }\r