From 79f484dd2e54211950bf9cb5ac0d60bf02bca941 Mon Sep 17 00:00:00 2001 From: Jinhao Date: Sat, 23 Apr 2016 03:15:11 +0800 Subject: [PATCH] fix an alpha blend algorithm issue --- include/nana/paint/detail/image_processor.hpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/include/nana/paint/detail/image_processor.hpp b/include/nana/paint/detail/image_processor.hpp index 7cdc1658..4051eb90 100644 --- a/include/nana/paint/detail/image_processor.hpp +++ b/include/nana/paint/detail/image_processor.hpp @@ -330,19 +330,21 @@ namespace detail } const pixel_argb_t * s_end = s_rgb + rest; + auto rest_d_rgb = d_rgb; for(auto i = s_rgb; i != s_end; ++i) { if(i->element.alpha_channel) { if(i->element.alpha_channel != 255) { - d_rgb[3].element.red = unsigned(d_rgb[3].element.red * (255 - i->element.alpha_channel) + i->element.red * i->element.alpha_channel) / 255; - d_rgb[3].element.green = unsigned(d_rgb[3].element.green * (255 - i->element.alpha_channel) + i->element.green * i->element.alpha_channel) / 255; - d_rgb[3].element.blue = unsigned(d_rgb[3].element.blue * (255 - i->element.alpha_channel) + i->element.blue * i->element.alpha_channel) / 255; + rest_d_rgb->element.red = unsigned(rest_d_rgb->element.red * (255 - i->element.alpha_channel) + i->element.red * i->element.alpha_channel) / 255; + rest_d_rgb->element.green = unsigned(rest_d_rgb->element.green * (255 - i->element.alpha_channel) + i->element.green * i->element.alpha_channel) / 255; + rest_d_rgb->element.blue = unsigned(rest_d_rgb->element.blue * (255 - i->element.alpha_channel) + i->element.blue * i->element.alpha_channel) / 255; } else - d_rgb[3] = *i; + *rest_d_rgb = *i; } + ++rest_d_rgb; } d_rgb = pixel_at(d_rgb, d_step_bytes); s_rgb = pixel_at(s_rgb, s_step_bytes);