summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2016-03-27 01:17:23 +0100
committerRobin Watts <robin.watts@artifex.com>2016-03-29 13:06:27 +0100
commit276be80ab6bf01fab28778b8d95e50c31f7ca7fc (patch)
treea70b93941f7627be406f29a109e08df94318760b
parent79959f7bcc6b3c8a6bea2e310fc076600de8d256 (diff)
downloadmupdf-276be80ab6bf01fab28778b8d95e50c31f7ca7fc.tar.xz
bmp: Add support for embedded PNG images.
-rw-r--r--source/fitz/load-bmp.c14
1 files changed, 10 insertions, 4 deletions
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 *