diff src/print.c @ 121:045ac4c27e62

Fri Dec 1 14:27:55 2006 John Ellis <johne@verizon.net> * print.c (print_job_ps_page_image): Use a white mask when printing transparent images, fixes bug #1426596.
author gqview
date Fri, 01 Dec 2006 19:41:45 +0000
parents 17acca639a86
children 71e1ebee420e
line wrap: on
line diff
--- a/src/print.c	Thu Nov 30 22:59:49 2006 +0000
+++ b/src/print.c	Fri Dec 01 19:41:45 2006 +0000
@@ -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 @@
 	gint i, j;
 	gint c;
 	guchar *p;
+	guchar bps_buf[3];
 	gint ret;
 
 	if (!pixbuf) return TRUE;
@@ -1280,7 +1285,17 @@
 		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)