diff options
author | Tor Andersson <tor@ghostscript.com> | 2010-12-04 17:31:05 +0000 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2010-12-04 17:31:05 +0000 |
commit | c8c6acfa08a280e6eabd89eb7a2fedd95b4d2f48 (patch) | |
tree | d7a5b2b6e9bab39733e7d12653fc272d68f5435a /draw | |
parent | 5e363d8e1a2925290cc626c4d4ab43346294c056 (diff) | |
download | mupdf-c8c6acfa08a280e6eabd89eb7a2fedd95b4d2f48.tar.xz |
The FZ_COMBINE2 rounding fix doesn't work. Implement it the other way (round then add).
Diffstat (limited to 'draw')
-rw-r--r-- | draw/porterduff.c | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/draw/porterduff.c b/draw/porterduff.c index e9d6d12d..c3699f0c 100644 --- a/draw/porterduff.c +++ b/draw/porterduff.c @@ -143,15 +143,15 @@ fz_paintspanmask2(byte * restrict dp, byte * restrict sp, byte * restrict mp, in { while (w--) { - int masa, imasa; + int masa; int ma = *mp++; ma = FZ_EXPAND(ma); masa = FZ_COMBINE(sp[1], ma); - imasa = 255 - masa; - imasa = FZ_EXPAND(imasa); - *dp = FZ_COMBINE2(*sp, ma, *dp, imasa); + masa = 255 - masa; + masa = FZ_EXPAND(masa); + *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; - *dp = masa + FZ_COMBINE(*dp, imasa); + *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; } } @@ -161,19 +161,19 @@ fz_paintspanmask4(byte * restrict dp, byte * restrict sp, byte * restrict mp, in { while (w--) { - int masa, imasa; + int masa; int ma = *mp++; ma = FZ_EXPAND(ma); masa = FZ_COMBINE(sp[3], ma); - imasa = 255 - masa; - imasa = FZ_EXPAND(imasa); - *dp = FZ_COMBINE2(*sp, ma, *dp, imasa); + masa = 255 - masa; + masa = FZ_EXPAND(masa); + *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; - *dp = FZ_COMBINE2(*sp, ma, *dp, imasa); + *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; - *dp = FZ_COMBINE2(*sp, ma, *dp, imasa); + *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; - *dp = masa + FZ_COMBINE(*dp, imasa); + *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; } } @@ -185,19 +185,17 @@ fz_paintspanmaskN(byte * restrict dp, byte * restrict sp, byte * restrict mp, in while (w--) { int k = n; - int masa, imasa; + int masa; int ma = *mp++; ma = FZ_EXPAND(ma); - masa = FZ_COMBINE(sp[n], ma); - imasa = 255-masa; - imasa = FZ_EXPAND(imasa); + masa = FZ_COMBINE(sp[n-1], ma); + masa = 255-masa; + masa = FZ_EXPAND(masa); while (k--) { - *dp = FZ_COMBINE2(*sp, ma, *dp, imasa); + *dp = FZ_COMBINE2(*sp, ma, *dp, masa); sp++; dp++; } - *dp = masa + FZ_COMBINE(*dp, imasa); - sp++; dp++; } } |