summaryrefslogtreecommitdiff
path: root/fitzdraw
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2010-02-09 02:14:34 +0100
committerTor Andersson <tor@ghostscript.com>2010-02-09 02:14:34 +0100
commitc96f530870d86d552007ca2e124fc3aa1f0824ac (patch)
tree66165c92397d03b84252c3b47e5a26c76ba4aafa /fitzdraw
parent7234a549b69760b097da1985805911b338e2a5d4 (diff)
downloadmupdf-c96f530870d86d552007ca2e124fc3aa1f0824ac.tar.xz
Use fz_pixmap instead of fz_image and remove the subclassing in pdf_image.
Diffstat (limited to 'fitzdraw')
-rw-r--r--fitzdraw/imagescale.c99
-rw-r--r--fitzdraw/meshdraw.c4
-rw-r--r--fitzdraw/pixmap.c31
3 files changed, 20 insertions, 114 deletions
diff --git a/fitzdraw/imagescale.c b/fitzdraw/imagescale.c
index 970b3468..b2a499b0 100644
--- a/fitzdraw/imagescale.c
+++ b/fitzdraw/imagescale.c
@@ -178,103 +178,6 @@ void (*fz_scol4)(byte *src, byte *dst, int w, int denom) = scol4;
void (*fz_scol5)(byte *src, byte *dst, int w, int denom) = scol5;
fz_pixmap *
-fz_newscaledpixmap(int w, int h, int n, int xdenom, int ydenom)
-{
- int ow = (w + xdenom - 1) / xdenom;
- int oh = (h + ydenom - 1) / ydenom;
- return fz_newpixmap(0, 0, ow, oh, n);
-}
-
-/* TODO: refactor */
-void
-fz_scalepixmaptile(fz_pixmap *dst, int xoffs, int yoffs, fz_pixmap *src, int xdenom, int ydenom)
-{
- unsigned char *buf;
- unsigned char *dstsamples;
- int y, iy, oy;
- int ow, oh, n;
- int remaining;
-
- void (*srowx)(byte *src, byte *dst, int w, int denom) = nil;
- void (*scolx)(byte *src, byte *dst, int w, int denom) = nil;
-
- ow = (src->w + xdenom - 1) / xdenom;
- oh = (src->h + ydenom - 1) / ydenom;
- xoffs /= xdenom;
- yoffs /= ydenom;
- n = src->n;
-
- assert(xoffs == 0); /* don't handle stride properly yet */
- assert(dst->n == n);
- assert(dst->w >= xoffs + ow && dst->h >= yoffs + oh);
-
- buf = fz_malloc(ow * n * ydenom);
-
- switch (n)
- {
- 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;
- }
-
- dstsamples = dst->samples + (yoffs * dst->w + xoffs)*dst->n;
- if (srowx && scolx)
- {
- for (y = 0, oy = 0; y < (src->h / ydenom) * ydenom; y += ydenom, oy++)
- {
- for (iy = 0; iy < ydenom; iy++)
- {
- srowx(src->samples + (y + iy) * src->w * n,
- buf + iy * ow * n,
- src->w, xdenom);
- }
- scolx(buf, dstsamples + oy * dst->w * n, ow, ydenom);
- }
-
- remaining = src->h - y;
- if (remaining)
- {
- for (iy = 0; iy < remaining; iy++)
- {
- srowx(src->samples + (y + iy) * src->w * n,
- buf + iy * ow * n,
- src->w, xdenom);
- }
- scolx(buf, dstsamples + oy * dst->w * n, ow, remaining);
- }
- }
-
- else
- {
- for (y = 0, oy = 0; y < (src->h / ydenom) * ydenom; y += ydenom, oy++)
- {
- for (iy = 0; iy < ydenom; iy++)
- {
- fz_srown(src->samples + (y + iy) * src->w * n,
- buf + iy * ow * n,
- src->w, xdenom, n);
- }
- fz_scoln(buf, dstsamples + oy * dst->w * n, ow, ydenom, n);
- }
-
- remaining = src->h - y;
- if (remaining)
- {
- for (iy = 0; iy < remaining; iy++)
- {
- fz_srown(src->samples + (y + iy) * src->w * n,
- buf + iy * ow * n,
- src->w, xdenom, n);
- }
- fz_scoln(buf, dstsamples + oy * dst->w * n, ow, remaining, n);
- }
- }
-
- fz_free(buf);
-}
-
-fz_pixmap *
fz_scalepixmap(fz_pixmap *src, int xdenom, int ydenom)
{
fz_pixmap *dst;
@@ -292,7 +195,7 @@ fz_scalepixmap(fz_pixmap *src, int xdenom, int ydenom)
buf = fz_malloc(ow * n * ydenom);
- dst = fz_newpixmap(0, 0, ow, oh, src->n);
+ dst = fz_newpixmap(src->colorspace, 0, 0, ow, oh);
switch (n)
{
diff --git a/fitzdraw/meshdraw.c b/fitzdraw/meshdraw.c
index a204f889..d756db12 100644
--- a/fitzdraw/meshdraw.c
+++ b/fitzdraw/meshdraw.c
@@ -328,12 +328,12 @@ fz_rendershade(fz_shade *shade, fz_matrix ctm, fz_colorspace *destcs, fz_pixmap
if (shade->usefunction)
{
n = 3;
- temp = fz_newpixmap(dest->x, dest->y, dest->w, dest->h, 2);
+ temp = fz_newpixmap(pdf_devicegray, dest->x, dest->y, dest->w, dest->h);
}
else if (shade->cs != destcs)
{
n = 2 + shade->cs->n;
- temp = fz_newpixmap(dest->x, dest->y, dest->w, dest->h, shade->cs->n + 1);
+ temp = fz_newpixmap(shade->cs, dest->x, dest->y, dest->w, dest->h);
}
else
{
diff --git a/fitzdraw/pixmap.c b/fitzdraw/pixmap.c
index 87c136f2..539234f6 100644
--- a/fitzdraw/pixmap.c
+++ b/fitzdraw/pixmap.c
@@ -1,7 +1,7 @@
#include "fitz.h"
fz_pixmap *
-fz_newpixmap(int x, int y, int w, int h, int n)
+fz_newpixmap(fz_colorspace *colorspace, int x, int y, int w, int h)
{
fz_pixmap *pix;
@@ -10,30 +10,31 @@ fz_newpixmap(int x, int y, int w, int h, int n)
pix->y = y;
pix->w = w;
pix->h = h;
- pix->n = n;
+ pix->colorspace = nil;
+ pix->n = 1;
- pix->samples = fz_malloc(pix->w * pix->h * pix->n * sizeof(fz_sample));
+ if (colorspace)
+ {
+ pix->colorspace = fz_keepcolorspace(colorspace);
+ pix->n = 1 + colorspace->n;
+ }
- return pix;
-}
+ pix->samples = fz_malloc(pix->w * pix->h * pix->n);
-fz_pixmap *
-fz_newpixmapwithrect(fz_irect r, int n)
-{
- return fz_newpixmap(r.x0, r.y0, r.x1 - r.x0, r.y1 - r.y0, n);
+ return pix;
}
fz_pixmap *
-fz_newpixmapcopy(fz_pixmap *old)
+fz_newpixmapwithrect(fz_colorspace *colorspace, fz_irect r)
{
- fz_pixmap *pix = fz_newpixmap(old->x, old->y, old->w, old->h, old->n);
- memcpy(pix->samples, old->samples, old->w * old->h * old->n);
- return pix;
+ return fz_newpixmap(colorspace, r.x0, r.y0, r.x1 - r.x0, r.y1 - r.y0);
}
void
fz_freepixmap(fz_pixmap *pix)
{
+ if (pix->colorspace)
+ fz_dropcolorspace(pix->colorspace);
fz_free(pix->samples);
fz_free(pix);
}
@@ -41,7 +42,7 @@ fz_freepixmap(fz_pixmap *pix)
void
fz_clearpixmap(fz_pixmap *pix, unsigned char value)
{
- memset(pix->samples, value, pix->w * pix->h * pix->n * sizeof(fz_sample));
+ memset(pix->samples, value, pix->w * pix->h * pix->n);
}
void
@@ -75,6 +76,8 @@ fz_debugpixmap(fz_pixmap *pix, char *prefix)
if (!alpha)
goto cleanup;
+ fprintf(stderr, "saving debug pixmap %s - %d\n", prefix, counter);
+
if (pix->n > 1)
{
if (pix->n > 2)