From c5f8d745e4dc42404409a2c166181d85bc87934b Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Thu, 6 Oct 2016 19:51:29 +0100 Subject: Correct maths error in painters. As part of the blending calculations, we do: dst = src * mask_alpha + dst * (1-mask_alpha.src_alpha) We calculate mask_alpha as ma, and 1-mask_alpha.src_alpha as masa. In full accuracy, we should never have ma + masa >= 1. Unfortunately, with the formulation used in the painters at the moment, we can. We therefore rejig the calculations slightly. --- source/fitz/draw-paint.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'source') diff --git a/source/fitz/draw-paint.c b/source/fitz/draw-paint.c index 50112d00..33ab20c8 100644 --- a/source/fitz/draw-paint.c +++ b/source/fitz/draw-paint.c @@ -885,8 +885,7 @@ template_span_with_mask_1_general(byte * restrict dp, int da, const byte * restr dp += 1+da; continue; } - masa = FZ_COMBINE(sp[1], ma); - masa = 255 - masa; + masa = FZ_REVERSE_COMBINE(sp[1], ma); masa = FZ_EXPAND(masa); *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; @@ -999,8 +998,7 @@ template_span_with_mask_3_general(byte * restrict dp, int da, const byte * restr dp += 3+da; continue; } - masa = FZ_COMBINE(sp[3], ma); - masa = 255 - masa; + masa = FZ_REVERSE_COMBINE(sp[3], ma); masa = FZ_EXPAND(masa); *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; @@ -1092,8 +1090,7 @@ template_span_with_mask_4_general(byte * restrict dp, int da, const byte * restr dp += 4+da; continue; } - masa = FZ_COMBINE(sp[4], ma); - masa = 255 - masa; + masa = FZ_REVERSE_COMBINE(sp[4], ma); masa = FZ_EXPAND(masa); *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; @@ -1187,8 +1184,7 @@ template_span_with_mask_N_general(byte * restrict dp, int da, const byte * restr dp += n+da; continue; } - masa = FZ_COMBINE(sp[n], ma); - masa = 255-masa; + masa = FZ_REVERSE_COMBINE(sp[n], ma); masa = FZ_EXPAND(masa); while (k--) { -- cgit v1.2.3