summaryrefslogtreecommitdiff
path: root/source/fitz/load-bmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/fitz/load-bmp.c')
-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 *