diff options
Diffstat (limited to 'fitz/image_jpx.c')
-rw-r--r-- | fitz/image_jpx.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/fitz/image_jpx.c b/fitz/image_jpx.c index 04bcfecd..0b3df098 100644 --- a/fitz/image_jpx.c +++ b/fitz/image_jpx.c @@ -24,6 +24,7 @@ fz_pixmap * fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *defcs, int indexed) { fz_pixmap *img; + fz_colorspace *origcs; opj_event_mgr_t evtmgr; opj_dparameters_t params; opj_dinfo_t *info; @@ -98,6 +99,7 @@ fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *defcs else if (n > 4) { n = 4; a = 1; } else { a = 0; } + origcs = defcs; if (defcs) { if (defcs->n == n) @@ -150,6 +152,8 @@ fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *defcs } } + opj_image_destroy(jpx); + if (a) { if (n == 4) @@ -162,7 +166,13 @@ fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *defcs fz_premultiply_pixmap(ctx, img); } - opj_image_destroy(jpx); + if (origcs != defcs) + { + fz_pixmap *tmp = fz_new_pixmap(ctx, origcs, w, h); + fz_convert_pixmap(ctx, tmp, img); + fz_drop_pixmap(ctx, img); + img = tmp; + } return img; } |