From: John Ellis Date: Fri, 1 Dec 2006 19:41:45 +0000 (+0000) Subject: Fri Dec 1 14:27:55 2006 John Ellis X-Git-Tag: v1.0.0~1682 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=e555f3e3e33361962df464b95c3eb7946ed1341c Fri Dec 1 14:27:55 2006 John Ellis * print.c (print_job_ps_page_image): Use a white mask when printing transparent images, fixes bug #1426596. --- diff --git a/ChangeLog b/ChangeLog index fd3bf1d7..9b1a1575 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Dec 1 14:27:55 2006 John Ellis + + * print.c (print_job_ps_page_image): Use a white mask when printing + transparent images, fixes bug #1426596. + Thu Nov 30 09:55:42 2006 John Ellis * slideshow.c (real_slideshow_start): Fix memory leak when unable to diff --git a/TODO b/TODO index c96b27b8..ffb8b1ca 100644 --- a/TODO +++ b/TODO @@ -131,7 +131,7 @@ d> fix gtk_table_attach use to not use FALSE for fill vertical arg. > do not lose slideshow when reworking window layout. - > fix printing of transparent images to not use black for transparency (white or user settable). +d> fix printing of transparent images to not use black for transparency (white or user settable). > fix comment field in keywords bar to a height of 2 or 3 text lines. diff --git a/src/print.c b/src/print.c index b12fa1f3..688ed1c8 100644 --- a/src/print.c +++ b/src/print.c @@ -67,6 +67,10 @@ #define PRINT_PS_DPI_MIN 150.0 /* method to use when scaling down image data */ #define PRINT_PS_MAX_INTERP GDK_INTERP_BILINEAR +/* color to use as mask when printing transparent images */ +#define PRINT_PS_MASK_R 255 +#define PRINT_PS_MASK_G 255 +#define PRINT_PS_MASK_B 255 /* padding between objects */ #define PRINT_TEXT_PADDING 3.0 @@ -1232,6 +1236,7 @@ static gint print_job_ps_page_image(PrintWindow *pw, GdkPixbuf *pixbuf, gint i, j; gint c; guchar *p; + guchar bps_buf[3]; gint ret; if (!pixbuf) return TRUE; @@ -1280,7 +1285,17 @@ static gint print_job_ps_page_image(PrintWindow *pw, GdkPixbuf *pixbuf, p = pix + j * rowstride; for (i = 0; i < sw; i++) { - print_job_ps_page_image_pixel(f, p); + if (bps == 3) + { + print_job_ps_page_image_pixel(f, p); + } + else + { + bps_buf[0] = (p[0] * p[3] + PRINT_PS_MASK_R * (256 - p[3])) >> 8; + bps_buf[1] = (p[1] * p[3] + PRINT_PS_MASK_G * (256 - p[3])) >> 8; + bps_buf[2] = (p[2] * p[3] + PRINT_PS_MASK_B * (256 - p[3])) >> 8; + print_job_ps_page_image_pixel(f, bps_buf); + } p+=bps; c++; if (c > 11)