From c96f530870d86d552007ca2e124fc3aa1f0824ac Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Tue, 9 Feb 2010 02:14:34 +0100 Subject: Use fz_pixmap instead of fz_image and remove the subclassing in pdf_image. --- fitzdraw/imagescale.c | 99 +-------------------------------------------------- fitzdraw/meshdraw.c | 4 +-- fitzdraw/pixmap.c | 31 ++++++++-------- 3 files changed, 20 insertions(+), 114 deletions(-) (limited to 'fitzdraw') diff --git a/fitzdraw/imagescale.c b/fitzdraw/imagescale.c index 970b3468..b2a499b0 100644 --- a/fitzdraw/imagescale.c +++ b/fitzdraw/imagescale.c @@ -177,103 +177,6 @@ void (*fz_scol2)(byte *src, byte *dst, int w, int denom) = scol2; 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) { @@ -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) -- cgit v1.2.3