summaryrefslogtreecommitdiff
path: root/source/fitz/bitmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/fitz/bitmap.c')
-rw-r--r--source/fitz/bitmap.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/source/fitz/bitmap.c b/source/fitz/bitmap.c
index 4ae74932..5d2af061 100644
--- a/source/fitz/bitmap.c
+++ b/source/fitz/bitmap.c
@@ -45,36 +45,37 @@ fz_clear_bitmap(fz_context *ctx, fz_bitmap *bit)
memset(bit->samples, 0, bit->stride * bit->h);
}
-/*
- * Write bitmap to PBM file
- */
-
void
-fz_write_pbm(fz_context *ctx, fz_bitmap *bitmap, char *filename)
+fz_output_pbm(fz_context *ctx, fz_output *out, fz_bitmap *bitmap)
{
- FILE *fp;
unsigned char *p;
int h, bytestride;
- fp = fz_fopen(filename, "wb");
- if (!fp)
- fz_throw(ctx, FZ_ERROR_GENERIC, "cannot open file '%s': %s", filename, strerror(errno));
+ if (bitmap->n != 1)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "too many color components in bitmap");
- assert(bitmap->n == 1);
-
- fprintf(fp, "P4\n%d %d\n", bitmap->w, bitmap->h);
+ fz_printf(ctx, out, "P4\n%d %d\n", bitmap->w, bitmap->h);
p = bitmap->samples;
-
h = bitmap->h;
bytestride = (bitmap->w + 7) >> 3;
while (h--)
{
- fwrite(p, 1, bytestride, fp);
+ fz_write(ctx, out, p, bytestride);
p += bitmap->stride;
}
+}
- fclose(fp);
+void
+fz_write_pbm(fz_context *ctx, fz_bitmap *bitmap, char *filename)
+{
+ fz_output *out = fz_new_output_with_path(ctx, filename, 0);
+ fz_try(ctx)
+ fz_output_pbm(ctx, out, bitmap);
+ fz_always(ctx)
+ fz_drop_output(ctx, out);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
}
fz_colorspace *fz_pixmap_colorspace(fz_context *ctx, fz_pixmap *pix)