diff options
Diffstat (limited to 'source/tools')
-rw-r--r-- | source/tools/mudraw.c | 21 | ||||
-rw-r--r-- | source/tools/murun.c | 9 | ||||
-rw-r--r-- | source/tools/pdfextract.c | 2 |
3 files changed, 19 insertions, 13 deletions
diff --git a/source/tools/mudraw.c b/source/tools/mudraw.c index a58912a9..b1ab97e9 100644 --- a/source/tools/mudraw.c +++ b/source/tools/mudraw.c @@ -363,6 +363,7 @@ static int lowmemory = 0; static int errored = 0; static fz_stext_sheet *sheet = NULL; static fz_colorspace *colorspace; +static int alpha; static char *filename; static int files = 0; static int num_workers = 0; @@ -835,7 +836,7 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in workers[band].tbounds = tbounds; memset(&workers[band].cookie, 0, sizeof(fz_cookie)); workers[band].list = list; - workers[band].pix = fz_new_pixmap_with_bbox(ctx, colorspace, &band_ibounds); + workers[band].pix = fz_new_pixmap_with_bbox(ctx, colorspace, &band_ibounds, alpha); fz_pixmap_set_resolution(workers[band].pix, resolution); DEBUG_THREADS(("Worker %d, Pre-triggering band %d\n", band, band)); SEMAPHORE_TRIGGER(workers[band].start); @@ -845,7 +846,7 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in } else { - pix = fz_new_pixmap_with_bbox(ctx, colorspace, &band_ibounds); + pix = fz_new_pixmap_with_bbox(ctx, colorspace, &band_ibounds, alpha); fz_pixmap_set_resolution(pix, resolution); } @@ -857,7 +858,7 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in else if (output_format == OUT_PAM) fz_write_pam_header(ctx, out, pix->w, totalheight, pix->n, savealpha); else if (output_format == OUT_PNG) - poc = fz_write_png_header(ctx, out, pix->w, totalheight, pix->n, savealpha); + poc = fz_write_png_header(ctx, out, pix->w, totalheight, pix->n, pix->alpha, savealpha); else if (output_format == OUT_PBM) fz_write_pbm_header(ctx, out, pix->w, totalheight); else if (output_format == OUT_PKM) @@ -889,11 +890,11 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in if (output) { if (output_format == OUT_PGM || output_format == OUT_PPM || output_format == OUT_PNM) - fz_write_pnm_band(ctx, out, pix->w, totalheight, pix->n, band, drawheight, pix->samples); + fz_write_pnm_band(ctx, out, pix->w, totalheight, pix->n, pix->stride, band, drawheight, pix->samples); else if (output_format == OUT_PAM) - fz_write_pam_band(ctx, out, pix->w, totalheight, pix->n, band, drawheight, pix->samples, savealpha); + fz_write_pam_band(ctx, out, pix->w, totalheight, pix->n, pix->stride, band, drawheight, pix->samples, savealpha); else if (output_format == OUT_PNG) - fz_write_png_band(ctx, out, poc, pix->w, totalheight, pix->n, band, drawheight, pix->samples, savealpha); + fz_write_png_band(ctx, out, poc, pix->stride, band, drawheight, pix->samples); else if (output_format == OUT_PWG) fz_write_pixmap_as_pwg(ctx, out, pix, NULL); else if (output_format == OUT_PCL) @@ -905,10 +906,10 @@ static void dodrawpage(fz_context *ctx, fz_page *page, fz_display_list *list, in fz_drop_bitmap(ctx, bit); } else - fz_write_color_pcl_band(ctx, out, pccoc, pix->w, totalheight, pix->n, band, drawheight, pix->samples); + fz_write_color_pcl_band(ctx, out, pccoc, pix->w, totalheight, pix->n, pix->stride, band, drawheight, pix->samples); } else if (output_format == OUT_PS) - fz_write_ps_band(ctx, out, psoc, pix->w, totalheight, pix->n, band, drawheight, pix->samples); + fz_write_ps_band(ctx, out, psoc, pix->w, totalheight, pix->n, pix->stride, band, drawheight, pix->samples); else if (output_format == OUT_PBM) { fz_bitmap *bit = fz_new_bitmap_from_pixmap_band(ctx, pix, NULL, band, bandheight); fz_write_pbm_band(ctx, out, bit); @@ -1537,20 +1538,24 @@ int mudraw_main(int argc, char **argv) } } + alpha = 1; switch (out_cs) { case CS_MONO: case CS_GRAY: case CS_GRAY_ALPHA: colorspace = fz_device_gray(ctx); + alpha = (out_cs == CS_GRAY_ALPHA); break; case CS_RGB: case CS_RGB_ALPHA: colorspace = fz_device_rgb(ctx); + alpha = (out_cs == CS_RGB_ALPHA); break; case CS_CMYK: case CS_CMYK_ALPHA: colorspace = fz_device_cmyk(ctx); + alpha = (out_cs == CS_CMYK_ALPHA); break; default: fprintf(stderr, "Unknown colorspace!\n"); diff --git a/source/tools/murun.c b/source/tools/murun.c index b8a7d991..e069bf0d 100644 --- a/source/tools/murun.c +++ b/source/tools/murun.c @@ -1748,10 +1748,11 @@ static void ffi_new_Pixmap(js_State *J) fz_context *ctx = js_getcontext(J); fz_colorspace *colorspace = js_touserdata(J, 1, "fz_colorspace"); fz_irect bounds = ffi_toirect(J, 2); + int alpha = js_toboolean(J, 3); fz_pixmap *pixmap; fz_try(ctx) - pixmap = fz_new_pixmap_with_bbox(ctx, colorspace, &bounds); + pixmap = fz_new_pixmap_with_bbox(ctx, colorspace, &bounds, alpha); fz_catch(ctx) rethrow(J); @@ -2260,11 +2261,11 @@ static void ffi_DisplayList_toPixmap(js_State *J) fz_display_list *list = js_touserdata(J, 0, "fz_display_list"); fz_matrix ctm = ffi_tomatrix(J, 1); fz_colorspace *colorspace = js_touserdata(J, 2, "fz_colorspace"); - int solid = js_isdefined(J, 3) ? js_toboolean(J, 3) : 1; + int alpha = js_isdefined(J, 3) ? js_toboolean(J, 3) : 0; fz_pixmap *pixmap; fz_try(ctx) - pixmap = fz_new_pixmap_from_display_list(ctx, list, &ctm, colorspace, solid); + pixmap = fz_new_pixmap_from_display_list(ctx, list, &ctm, colorspace, alpha); fz_catch(ctx) rethrow(J); @@ -3301,7 +3302,7 @@ int murun_main(int argc, char **argv) jsB_propcon(J, "fz_buffer", "Buffer", ffi_new_Buffer, 1); jsB_propcon(J, "fz_document", "Document", ffi_new_Document, 1); - jsB_propcon(J, "fz_pixmap", "Pixmap", ffi_new_Pixmap, 2); + jsB_propcon(J, "fz_pixmap", "Pixmap", ffi_new_Pixmap, 3); jsB_propcon(J, "fz_image", "Image", ffi_new_Image, 1); jsB_propcon(J, "fz_font", "Font", ffi_new_Font, 2); jsB_propcon(J, "fz_text", "Text", ffi_new_Text, 0); diff --git a/source/tools/pdfextract.c b/source/tools/pdfextract.c index 3f79137a..b784fda1 100644 --- a/source/tools/pdfextract.c +++ b/source/tools/pdfextract.c @@ -39,7 +39,7 @@ static void writepixmap(fz_context *ctx, fz_pixmap *pix, char *file, int rgb) if (rgb && pix->colorspace && pix->colorspace != fz_device_rgb(ctx)) { fz_irect bbox; - converted = fz_new_pixmap_with_bbox(ctx, fz_device_rgb(ctx), fz_pixmap_bbox(ctx, pix, &bbox)); + converted = fz_new_pixmap_with_bbox(ctx, fz_device_rgb(ctx), fz_pixmap_bbox(ctx, pix, &bbox), 1); fz_convert_pixmap(ctx, converted, pix); pix = converted; } |