From e635a6a095e02eac6888e325fbe8ea22c41b541a Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Thu, 12 Aug 2010 17:20:14 +0200 Subject: Do not un-premultiply alpha when computing mask luminance (bzr r9508.1.61) --- src/display/nr-arena-item.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/display/nr-arena-item.cpp b/src/display/nr-arena-item.cpp index ea162ca3d..2aae21bf1 100644 --- a/src/display/nr-arena-item.cpp +++ b/src/display/nr-arena-item.cpp @@ -313,16 +313,12 @@ nr_arena_item_invoke_update (NRArenaItem *item, NRRectL *area, NRGC *gc, struct MaskLuminanceToAlpha { guint32 operator()(guint32 in) { - // original computation in double: r*0.2125 + g*0.7154 + b*0.0721 EXTRACT_ARGB32(in, a, r, g, b) - // unpremultiply color values - if (a != 0) { - r = unpremul_alpha(r, a); - g = unpremul_alpha(g, a); - b = unpremul_alpha(b, a); - } + // the operation of unpremul -> luminance-to-alpha -> multiply by alpha + // is equivalent to luminance-to-alpha on premultiplied color values + // original computation in double: r*0.2125 + g*0.7154 + b*0.0721 guint32 ao = r*54 + g*182 + b*18; - return premul_alpha((ao + 127) / 255, a) << 24; + return ((ao + 127) / 255) << 24; } }; -- cgit v1.2.3