summaryrefslogtreecommitdiff
path: root/source/fitz/draw-paint.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2016-10-06 19:51:29 +0100
committerRobin Watts <robin.watts@artifex.com>2016-10-07 16:56:46 +0100
commitc5f8d745e4dc42404409a2c166181d85bc87934b (patch)
tree1ff341b87b3891a998aba07fb3699b1dd4148ce4 /source/fitz/draw-paint.c
parent7836643e0d6e9cc8e9d0d5c71cbfac5ee772ae21 (diff)
downloadmupdf-c5f8d745e4dc42404409a2c166181d85bc87934b.tar.xz
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.
Diffstat (limited to 'source/fitz/draw-paint.c')
-rw-r--r--source/fitz/draw-paint.c12
1 files changed, 4 insertions, 8 deletions
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--)
{