summaryrefslogtreecommitdiff
path: root/source/fitz/load-bmp.c
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2016-03-24 00:04:19 +0100
committerRobin Watts <robin.watts@artifex.com>2016-03-29 13:06:27 +0100
commit93f96d651c978b2a5fac0978b88403720b5a149d (patch)
tree607f8aa71fb878c452f5e55169d3bc443551a1ce /source/fitz/load-bmp.c
parentc244e47d6ddcecca5e589aea82e0dd0a0bf128ad (diff)
downloadmupdf-93f96d651c978b2a5fac0978b88403720b5a149d.tar.xz
bmp: Optimize reading of bitmap image data.
Diffstat (limited to 'source/fitz/load-bmp.c')
-rw-r--r--source/fitz/load-bmp.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/source/fitz/load-bmp.c b/source/fitz/load-bmp.c
index b1dd23be..28f663bb 100644
--- a/source/fitz/load-bmp.c
+++ b/source/fitz/load-bmp.c
@@ -714,9 +714,10 @@ bmp_read_bitmap(fz_context *ctx, struct info *info, unsigned char *p, unsigned c
unsigned char *sp = ssp + y * sstride;
unsigned char *dp = ddp + y * dstride;
- for (x = 0; x < width; x++)
+ switch (bitcount)
{
- if (bitcount == 32)
+ case 32:
+ for (x = 0; x < width; x++)
{
int sample = (sp[3] << 24) | (sp[2] << 16) | (sp[1] << 8) | sp[0];
*dp++ = (sample & info->rmask) >> info->rshift;
@@ -725,7 +726,9 @@ bmp_read_bitmap(fz_context *ctx, struct info *info, unsigned char *p, unsigned c
*dp++ = 255;
sp += 4;
}
- else if (bitcount == 24)
+ break;
+ case 24:
+ for (x = 0; x < width; x++)
{
*dp++ = sp[2];
*dp++ = sp[1];
@@ -733,7 +736,9 @@ bmp_read_bitmap(fz_context *ctx, struct info *info, unsigned char *p, unsigned c
*dp++ = 255;
sp += 3;
}
- else if (bitcount == 16)
+ break;
+ case 16:
+ for (x = 0; x < width; x++)
{
int sample = (sp[1] << 8) | sp[0];
int r = (sample & info->rmask) >> info->rshift;
@@ -745,7 +750,9 @@ bmp_read_bitmap(fz_context *ctx, struct info *info, unsigned char *p, unsigned c
*dp++ = 255;
sp += 2;
}
- else if (bitcount == 8)
+ break;
+ case 8:
+ for (x = 0; x < width; x++)
{
*dp++ = info->palette[3 * sp[0] + 0];
*dp++ = info->palette[3 * sp[0] + 1];
@@ -753,7 +760,9 @@ bmp_read_bitmap(fz_context *ctx, struct info *info, unsigned char *p, unsigned c
*dp++ = 255;
sp++;
}
- else if (bitcount == 4)
+ break;
+ case 4:
+ for (x = 0; x < width; x++)
{
int idx;
switch (x & 1)
@@ -766,7 +775,9 @@ bmp_read_bitmap(fz_context *ctx, struct info *info, unsigned char *p, unsigned c
*dp++ = info->palette[3 * idx + 2];
*dp++ = 255;
}
- else if (bitcount == 2)
+ break;
+ case 2:
+ for (x = 0; x < width; x++)
{
int idx;
switch (x & 3)
@@ -781,7 +792,9 @@ bmp_read_bitmap(fz_context *ctx, struct info *info, unsigned char *p, unsigned c
*dp++ = info->palette[3 * idx + 2];
*dp++ = 255;
}
- else if (bitcount == 1)
+ break;
+ case 1:
+ for (x = 0; x < width; x++)
{
int idx;
switch (x & 7)
@@ -800,6 +813,7 @@ bmp_read_bitmap(fz_context *ctx, struct info *info, unsigned char *p, unsigned c
*dp++ = info->palette[3 * idx + 2];
*dp++ = 255;
}
+ break;
}
}