summaryrefslogtreecommitdiff
path: root/fitz/res_pixmap.c
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2010-07-15 23:25:00 +0000
committerTor Andersson <tor@ghostscript.com>2010-07-15 23:25:00 +0000
commit22c78bd39b2d8316af4c7d20d7f322fa7d534102 (patch)
tree5e957a0c183049970f4eda05dc6d8f4a1692e835 /fitz/res_pixmap.c
parent3effc3ad56c9e90f39638a6edd14a9aa07d9dabe (diff)
downloadmupdf-22c78bd39b2d8316af4c7d20d7f322fa7d534102.tar.xz
Refactored xref opening functions, command line tools, and rewrote pdfdraw to be more illustrative.
Diffstat (limited to 'fitz/res_pixmap.c')
-rw-r--r--fitz/res_pixmap.c39
1 files changed, 29 insertions, 10 deletions
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)