From 22c78bd39b2d8316af4c7d20d7f322fa7d534102 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 15 Jul 2010 23:25:00 +0000 Subject: Refactored xref opening functions, command line tools, and rewrote pdfdraw to be more illustrative. --- fitz/fitz.h | 4 ++-- fitz/res_pixmap.c | 39 +++++++++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 12 deletions(-) (limited to 'fitz') diff --git a/fitz/fitz.h b/fitz/fitz.h index 38b26619..3d7c5cb8 100644 --- a/fitz/fitz.h +++ b/fitz/fitz.h @@ -703,8 +703,8 @@ void fz_gammapixmap(fz_pixmap *pix, float gamma); fz_pixmap * fz_scalepixmap(fz_pixmap *src, int xdenom, int ydenom); fz_error fz_writepnm(fz_pixmap *pixmap, char *filename); -fz_error fz_writepam(fz_pixmap *pixmap, char *filename); -fz_error fz_writepng(fz_pixmap *pixmap, char *filename, int alpha); +fz_error fz_writepam(fz_pixmap *pixmap, char *filename, int savealpha); +fz_error fz_writepng(fz_pixmap *pixmap, char *filename, int savealpha); /* * Colorspace resources. diff --git a/fitz/res_pixmap.c b/fitz/res_pixmap.c index f089c11c..80ace5fa 100644 --- a/fitz/res_pixmap.c +++ b/fitz/res_pixmap.c @@ -131,29 +131,48 @@ fz_writepnm(fz_pixmap *pixmap, char *filename) */ fz_error -fz_writepam(fz_pixmap *pixmap, char *filename) +fz_writepam(fz_pixmap *pixmap, char *filename, int savealpha) { + unsigned char *sp; + int y, w, k; FILE *fp; + int sn = pixmap->n; + int dn = pixmap->n; + if (!savealpha && dn > 1) + dn--; + fp = fopen(filename, "wb"); if (!fp) return fz_throw("cannot open file '%s': %s", filename, strerror(errno)); fprintf(fp, "P7\n"); fprintf(fp, "WIDTH %d\n", pixmap->w); - fprintf(fp, "HEGIHT %d\n", pixmap->h); - fprintf(fp, "DEPTH %d\n", pixmap->n); + fprintf(fp, "HEIGHT %d\n", pixmap->h); + fprintf(fp, "DEPTH %d\n", dn); fprintf(fp, "MAXVAL 255\n"); - switch (pixmap->n) + if (pixmap->colorspace) + fprintf(fp, "# COLORSPACE %s\n", pixmap->colorspace->name); + switch (dn) { case 1: fprintf(fp, "TUPLTYPE GRAYSCALE\n"); break; - case 2: fprintf(fp, "TUPLTYPE GRAYSCALE_ALPHA\n"); break; - case 4: fprintf(fp, "TUPLTYPE RGB_ALPHA\n"); break; - case 5: fprintf(fp, "TUPLTYPE CMYK_ALPHA\n"); break; + case 2: if (sn == 2) fprintf(fp, "TUPLTYPE GRAYSCALE_ALPHA\n"); break; + case 3: if (sn == 4) fprintf(fp, "TUPLTYPE RGB\n"); break; + case 4: if (sn == 4) fprintf(fp, "TUPLTYPE RGB_ALPHA\n"); break; } fprintf(fp, "ENDHDR\n"); - fwrite(pixmap->samples, pixmap->w * pixmap->n, pixmap->h, fp); + sp = pixmap->samples; + for (y = 0; y < pixmap->h; y++) + { + w = pixmap->w; + while (w--) + { + for (k = 0; k < dn; k++) + putc(sp[k], fp); + sp += sn; + } + } fclose(fp); @@ -195,7 +214,7 @@ static void putchunk(char *tag, unsigned char *data, int size, FILE *fp) } fz_error -fz_writepng(fz_pixmap *pixmap, char *filename, int alpha) +fz_writepng(fz_pixmap *pixmap, char *filename, int savealpha) { static const unsigned char pngsig[8] = { 137, 80, 78, 71, 13, 10, 26, 10 }; FILE *fp; @@ -211,7 +230,7 @@ fz_writepng(fz_pixmap *pixmap, char *filename, int alpha) sn = pixmap->n; dn = pixmap->n; - if (!alpha && dn > 1) + if (!savealpha && dn > 1) dn--; switch (dn) -- cgit v1.2.3