From bd8f189bd1faf4fc5a81fbb6b34d23bb1ab215ff Mon Sep 17 00:00:00 2001 From: Marcin Rudowski Date: Thu, 12 Aug 2010 06:59:35 +0000 Subject: [PATCH] fix raster blending, ported r2137, fixing #589 --- include/mapnik/graphics.hpp | 20 ++++++++++++++++++++ src/agg/process_raster_symbolizer.cpp | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/mapnik/graphics.hpp b/include/mapnik/graphics.hpp index 561d8634f..70ff7cb12 100644 --- a/include/mapnik/graphics.hpp +++ b/include/mapnik/graphics.hpp @@ -300,6 +300,11 @@ public: #ifdef MAPNIK_BIG_ENDIAN unsigned a1 = rgba1 & 0xff; if (a1 == 0) continue; + if (a1 == 0xff) + { + row_to[x] = rgba1; + continue; + } unsigned r1 = (rgba1 >> 24) & 0xff; unsigned g1 = (rgba1 >> 16 ) & 0xff; unsigned b1 = (rgba1 >> 8) & 0xff; @@ -319,6 +324,11 @@ public: #else unsigned a1 = (rgba1 >> 24) & 0xff; if (a1 == 0) continue; + if (a1 == 0xff) + { + row_to[x] = rgba1; + continue; + } unsigned r1 = rgba1 & 0xff; unsigned g1 = (rgba1 >> 8 ) & 0xff; unsigned b1 = (rgba1 >> 16) & 0xff; @@ -360,6 +370,11 @@ public: #ifdef MAPNIK_BIG_ENDIAN unsigned a1 = int( (rgba1 & 0xff) * opacity ); if (a1 == 0) continue; + if (a1 == 0xff) + { + row_to[x] = rgba1; + continue; + } unsigned r1 = (rgba1 >> 24) & 0xff; unsigned g1 = (rgba1 >> 16 ) & 0xff; unsigned b1 = (rgba1 >> 8) & 0xff; @@ -378,6 +393,11 @@ public: #else unsigned a1 = int( ((rgba1 >> 24) & 0xff) * opacity ); if (a1 == 0) continue; + if (a1 == 0xff) + { + row_to[x] = rgba1; + continue; + } unsigned r1 = rgba1 & 0xff; unsigned g1 = (rgba1 >> 8 ) & 0xff; unsigned b1 = (rgba1 >> 16) & 0xff; diff --git a/src/agg/process_raster_symbolizer.cpp b/src/agg/process_raster_symbolizer.cpp index 1210a63ba..2510e34b9 100644 --- a/src/agg/process_raster_symbolizer.cpp +++ b/src/agg/process_raster_symbolizer.cpp @@ -69,7 +69,7 @@ void agg_renderer::process(raster_symbolizer const& sym, if (sym.get_mode() == "normal"){ if (sym.get_opacity() == 1.0) { - pixmap_.set_rectangle(start_x,start_y,target); + pixmap_.set_rectangle_alpha(start_x,start_y,target); } else { pixmap_.set_rectangle_alpha2(target,start_x,start_y, sym.get_opacity()); }