summaryrefslogtreecommitdiff
path: root/fitz/res_pixmap.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2011-12-07 22:28:31 +0100
committerRobin Watts <robin.watts@artifex.com>2011-12-08 11:42:57 +0000
commit164ae7a63b56da5a1a2cf63701583753aa433762 (patch)
tree18e376f41142798c49a3849729a84e6a587dc9e2 /fitz/res_pixmap.c
parent7a6b60d0ec1abac316917690878011c3228a6fb7 (diff)
downloadmupdf-164ae7a63b56da5a1a2cf63701583753aa433762.tar.xz
Undo pre-multiplied alpha when saving PNG with alpha channels.
Diffstat (limited to 'fitz/res_pixmap.c')
-rw-r--r--fitz/res_pixmap.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/fitz/res_pixmap.c b/fitz/res_pixmap.c
index 83f46526..b1f151c3 100644
--- a/fitz/res_pixmap.c
+++ b/fitz/res_pixmap.c
@@ -226,6 +226,26 @@ fz_premultiply_pixmap(fz_pixmap *pix)
}
}
+void
+fz_unmultiply_pixmap(fz_pixmap *pix)
+{
+ unsigned char *s = pix->samples;
+ int a, inva;
+ int k, x, y;
+
+ for (y = 0; y < pix->h; y++)
+ {
+ for (x = 0; x < pix->w; x++)
+ {
+ a = s[pix->n - 1];
+ inva = a ? 255 * 256 / a : 0;
+ for (k = 0; k < pix->n - 1; k++)
+ s[k] = (s[k] * inva) >> 8;
+ s += pix->n;
+ }
+ }
+}
+
fz_pixmap *
fz_alpha_from_gray(fz_pixmap *gray, int luminosity)
{