From 276be80ab6bf01fab28778b8d95e50c31f7ca7fc Mon Sep 17 00:00:00 2001 From: Sebastian Rasmussen Date: Sun, 27 Mar 2016 01:17:23 +0100 Subject: bmp: Add support for embedded PNG images. --- source/fitz/load-bmp.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'source/fitz') diff --git a/source/fitz/load-bmp.c b/source/fitz/load-bmp.c index cb314587..6641da80 100644 --- a/source/fitz/load-bmp.c +++ b/source/fitz/load-bmp.c @@ -68,6 +68,7 @@ enum { BI_RLE4 = 2, BI_BITFIELDS = 3, BI_JPEG = 4, + BI_PNG = 5, }; struct info @@ -727,7 +728,7 @@ bmp_read_image(fz_context *ctx, struct info *info, unsigned char *p, int total, info->width, info->height); if (info->compression != BI_RGB && info->compression != BI_RLE8 && info->compression != BI_RLE4 && info->compression != BI_BITFIELDS && - info->compression != BI_JPEG) + info->compression != BI_JPEG && info->compression != BI_PNG) fz_throw(ctx, FZ_ERROR_GENERIC, "unsupported compression method (%d) in bmp image", info->compression); if ((info->compression == BI_RGB && info->bitcount != 1 && info->bitcount != 2 && info->bitcount != 4 && @@ -736,7 +737,8 @@ bmp_read_image(fz_context *ctx, struct info *info, unsigned char *p, int total, (info->compression == BI_RLE8 && info->bitcount != 8) || (info->compression == BI_RLE4 && info->bitcount != 4) || (info->compression == BI_BITFIELDS && info->bitcount != 16 && info->bitcount != 32) || - (info->compression == BI_JPEG && info->bitcount != 0)) + (info->compression == BI_JPEG && info->bitcount != 0) || + (info->compression == BI_PNG && info->bitcount != 0)) fz_throw(ctx, FZ_ERROR_GENERIC, "invalid bits per pixel (%d) for compression (%d) in bmp image", info->bitcount, info->compression); if (info->rbits > 0 && info->rbits != 4 && info->rbits != 5 && info->rbits != 8) @@ -755,6 +757,12 @@ bmp_read_image(fz_context *ctx, struct info *info, unsigned char *p, int total, p = begin + info->offset; return fz_load_jpeg(ctx, p, end - p); } + else if (info->compression == BI_PNG) + { + if (p - begin < info->offset) + p = begin + info->offset; + return fz_load_png(ctx, p, end - p); + } else { p = bmp_read_color_table(ctx, info, p, begin + info->offset); @@ -762,8 +770,6 @@ bmp_read_image(fz_context *ctx, struct info *info, unsigned char *p, int total, p = begin + info->offset; return bmp_read_bitmap(ctx, info, p, end); } - - return NULL; } fz_pixmap * -- cgit v1.2.3