summaryrefslogtreecommitdiff
path: root/source/tools
diff options
context:
space:
mode:
Diffstat (limited to 'source/tools')
-rw-r--r--source/tools/mudraw.c21
-rw-r--r--source/tools/murun.c9
-rw-r--r--source/tools/pdfextract.c2
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;
}