summaryrefslogtreecommitdiff
path: root/raster/imagescale.c
diff options
context:
space:
mode:
Diffstat (limited to 'raster/imagescale.c')
-rw-r--r--raster/imagescale.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/raster/imagescale.c b/raster/imagescale.c
index bbe20565..7edb0cd2 100644
--- a/raster/imagescale.c
+++ b/raster/imagescale.c
@@ -212,7 +212,23 @@ fz_scalepixmap(fz_pixmap **dstp, fz_pixmap *src, int xdenom, int ydenom)
case 1: srowx = fz_srow1; scolx = fz_scol1; break;
case 2: srowx = fz_srow2; scolx = fz_scol2; break;
case 4: srowx = fz_srow4; scolx = fz_scol4; break;
- case 5: srowx = fz_srow5; scolx = fz_scol5; break;
+ case 5: srowx = fz_srow5; scolx = fz_scol5;
+ if (!(xdenom & (xdenom - 1)))
+ {
+ unsigned v = xdenom;
+ xdenom = 0;
+ while ((v >>= 1)) xdenom++;
+ srowx = srow5p2;
+ }
+ if (!(ydenom & (ydenom - 1)))
+ {
+ unsigned v = ydenom2;
+ ydenom2 = 0;
+ while ((v >>= 1)) ydenom2++;
+ scolx = scol5p2;
+ }
+
+ break;
}
if (srowx && scolx)