summaryrefslogtreecommitdiff
path: root/source/fitz/pixmap.c
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2016-10-29 15:53:58 +0800
committerSebastian Rasmussen <sebras@gmail.com>2016-12-14 20:36:25 +0100
commitd53ab7a97c018aaa0e0adcaabcebcc72c080f724 (patch)
treee0627cf3dcfb6c286bfadf9dedc40547875083e6 /source/fitz/pixmap.c
parent5ad76a1961559904bbb9312d92dd15c3ed0c67b5 (diff)
downloadmupdf-d53ab7a97c018aaa0e0adcaabcebcc72c080f724.tar.xz
Let pixmap colorspace conversion create new pixmap.
This moves dropping the converted pixmap into fz_convert_pixmap(), which relieves every caller from doing so. Moreover resolution, position and interpolation are kept.
Diffstat (limited to 'source/fitz/pixmap.c')
-rw-r--r--source/fitz/pixmap.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/source/fitz/pixmap.c b/source/fitz/pixmap.c
index 9131a7a1..1d080576 100644
--- a/source/fitz/pixmap.c
+++ b/source/fitz/pixmap.c
@@ -860,6 +860,36 @@ fz_pixmap_size(fz_context *ctx, fz_pixmap * pix)
}
fz_pixmap *
+fz_convert_pixmap(fz_context *ctx, fz_pixmap *pix, fz_colorspace *ds, int keep_alpha)
+{
+ fz_pixmap *cvt;
+
+ if (!ds && !keep_alpha)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "cannot both throw away and keep alpha");
+
+ cvt = fz_new_pixmap(ctx, ds, pix->w, pix->h, keep_alpha && pix->alpha);
+
+ cvt->xres = pix->xres;
+ cvt->yres = pix->yres;
+ cvt->x = pix->x;
+ cvt->y = pix->y;
+ cvt->interpolate = pix->interpolate;
+
+ fz_try(ctx)
+ {
+ fz_pixmap_converter *pc = fz_lookup_pixmap_converter(ctx, ds, pix->colorspace);
+ pc(ctx, cvt, pix);
+ }
+ fz_catch(ctx)
+ {
+ fz_drop_pixmap(ctx, cvt);
+ fz_rethrow(ctx);
+ }
+
+ return cvt;
+}
+
+fz_pixmap *
fz_new_pixmap_from_8bpp_data(fz_context *ctx, int x, int y, int w, int h, unsigned char *sp, int span)
{
fz_pixmap *pixmap = fz_new_pixmap(ctx, NULL, w, h, 1);