diff options
| author | Krzysztof Kosi??ski <tweenk.pl@gmail.com> | 2010-08-12 15:20:14 +0000 |
|---|---|---|
| committer | Krzysztof KosiĆski <tweenk.pl@gmail.com> | 2010-08-12 15:20:14 +0000 |
| commit | e635a6a095e02eac6888e325fbe8ea22c41b541a (patch) | |
| tree | 63f70b21c224cc96a9259ed85f3a6da7eb36b602 /src | |
| parent | Fix computation of drawbox for filtered, rotated items (diff) | |
| download | inkscape-e635a6a095e02eac6888e325fbe8ea22c41b541a.tar.gz inkscape-e635a6a095e02eac6888e325fbe8ea22c41b541a.zip | |
Do not un-premultiply alpha when computing mask luminance
(bzr r9508.1.61)
Diffstat (limited to 'src')
| -rw-r--r-- | src/display/nr-arena-item.cpp | 12 |
1 files changed, 4 insertions, 8 deletions
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; } }; |
