summaryrefslogtreecommitdiff
path: root/source/fitz/pixmap.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-12-21 16:19:28 +0100
committerTor Andersson <tor.andersson@artifex.com>2016-12-27 15:06:51 +0100
commit9423400441f32a4c28651ee255cb95cecf49a57a (patch)
tree1cea74f63248ca990e92ca73ef52a87d04aed769 /source/fitz/pixmap.c
parentbc0b5d4b39e3050c36162d719666053e520161c9 (diff)
downloadmupdf-9423400441f32a4c28651ee255cb95cecf49a57a.tar.xz
Common code to ensure we only premultiply pixmaps with additive colors.
Diffstat (limited to 'source/fitz/pixmap.c')
-rw-r--r--source/fitz/pixmap.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/source/fitz/pixmap.c b/source/fitz/pixmap.c
index 1d080576..156206f9 100644
--- a/source/fitz/pixmap.c
+++ b/source/fitz/pixmap.c
@@ -670,6 +670,9 @@ fz_premultiply_pixmap(fz_context *ctx, fz_pixmap *pix)
if (!pix->alpha)
return;
+ if (fz_colorspace_is_subtractive(ctx, pix->colorspace))
+ fz_throw(ctx, FZ_ERROR_GENERIC, "cannot pre-multiply subtractive colors");
+
for (y = 0; y < pix->h; y++)
{
for (x = 0; x < pix->w; x++)
@@ -709,6 +712,18 @@ fz_unmultiply_pixmap(fz_context *ctx, fz_pixmap *pix)
}
fz_pixmap *
+fz_ensure_pixmap_is_additive(fz_context *ctx, fz_pixmap *pix)
+{
+ if (fz_colorspace_is_subtractive(ctx, pix->colorspace))
+ {
+ fz_pixmap *rgb = fz_convert_pixmap(ctx, pix, fz_device_rgb(ctx), 1);
+ fz_drop_pixmap(ctx, pix);
+ return rgb;
+ }
+ return pix;
+}
+
+fz_pixmap *
fz_alpha_from_gray(fz_context *ctx, fz_pixmap *gray)
{
fz_pixmap *alpha;