[gs-cvs] gs/src

Russell Lang ghostgum at casper.ghostscript.com
Tue Mar 11 03:36:44 PST 2003


Update of /cvs/ghostscript/gs/src
In directory casper:/tmp/cvs-serv15309/src

Modified Files:
	bcwin32.mak devs.mak gdevpng.c gdevprn.h macosx.mak msvc32.mak 
	openvms.mak os2.mak unix-gcc.mak unixansi.mak watcw32.mak 
Log Message:
Add pngalpha device that uses RGBA, with the alpha channel 
providing pixel coverage.  Used for generating PNG images with a 
transparent background.  

DETAILS
Add missing initialiser for get_clipping_box to 
prn_color_params_procs macro.  (src/gdevprn.h)

Avoid cast warning for software_key (src/gdevpng.c).

Add pngalpha device that uses RGBA.  This requires custom 
encode_color and decode_color procedures to put RGB in the 
first three bytes while leaving the fourth A byte as opaque.
To avoid gx_no_color_value, the alpha is stored inverted so
opaque is 0x00 and transparent is 0xff.

If pngalpha is told to fill the entire page with white, it uses 
the kludge of instead filling with almost white and transparent 
(0xfefefeff). This works because it is triggered by "erasepage", 
but not by "1 setgray clippath fill". A custom open_device and 
put_params are needed to save the clist or memory device 
fill_rectangle, and to restore the pngalpha_fill_rectangle.  

A custom copy_alpha is required to correctly blend RGBA. The 
blend is based on pixel coverage, not true transparency 
Ghostscript doesn't pass transparency to the device. Alpha blend 
maths from Porter and Duff 1984 paper for "A over B". RGB values 
are stored without pre-multiplication. A custom 
pngalpha_create_buf_device is used to replace the memory device 
implementation gx_default_copy_alpha with pngalpha_copy_alpha, 
but not to replace clist_copy_alpha.  

The pngalpha device is successful at giving a transparent 
background to many images such as colorcir.ps and golfer.eps, 
but not tiger.eps which fills the clipping path with grey.  
It does not implement a transparent background for PDF 1.4
transparent input files.


Index: bcwin32.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/bcwin32.mak,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- bcwin32.mak	31 Oct 2002 10:51:29 -0000	1.25
+++ bcwin32.mak	11 Mar 2003 11:36:41 -0000	1.26
@@ -318,7 +318,7 @@
 DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
 DEVICE_DEVS11=$(DD)bmpmono.dev $(DD)bmp16.dev $(DD)bmp256.dev $(DD)bmp16m.dev $(DD)tiff12nc.dev $(DD)tiff24nc.dev
 DEVICE_DEVS12=$(DD)psmono.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
-DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev
+DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
 DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
 DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
 # Overflow for DEVS3,4,5,6,9

Index: devs.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/devs.mak,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -d -r1.84 -r1.85
--- devs.mak	12 Feb 2003 14:29:27 -0000	1.84
+++ devs.mak	11 Mar 2003 11:36:41 -0000	1.85
@@ -172,6 +172,7 @@
 #	png16	4-bit color Portable Network Graphics (PNG)
 #	png256	8-bit color Portable Network Graphics (PNG)
 #	png16m	24-bit color Portable Network Graphics (PNG)
+#	pngalpha 32-bit RGBA color Portable Network Graphics (PNG)
 #	psmono	PostScript (Level 1) monochrome image
 #	psgray	PostScript (Level 1) 8-bit gray image
 #	psrgb	PostScript (Level 2) 24-bit color image
@@ -1340,6 +1341,10 @@
 $(DD)png16m.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev
 	$(SETPDEV2) $(DD)png16m $(png_)
 	$(ADDMOD) $(DD)png16m $(png_i_)
+
+$(DD)pngalpha.dev : $(DEVS_MAK) $(libpng_dev) $(png_) $(GLD)page.dev
+	$(SETPDEV2) $(DD)pngalpha $(png_)
+	$(ADDMOD) $(DD)pngalpha $(png_i_)
 
 ### -------------------- PNG with transparency -------------------- ###
 

Index: gdevpng.c
===================================================================
RCS file: /cvs/ghostscript/gs/src/gdevpng.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- gdevpng.c	21 Feb 2002 22:24:51 -0000	1.6
+++ gdevpng.c	11 Mar 2003 11:36:41 -0000	1.7
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 2000 Aladdin Enterprises.  All rights reserved.
+/* Copyright (C) 1995-2003, artofcode LLC.  All rights reserved.
   
   This software is provided AS-IS with no warranty, either express or
   implied.
@@ -35,6 +35,7 @@
 /* Original version by Russell Lang 1995-07-04 */
 
 #include "gdevprn.h"
+#include "gdevmem.h"
 #include "gdevpccm.h"
 #include "gscdefs.h"
 
@@ -64,6 +65,13 @@
 #define Y_DPI 72
 
 private dev_proc_print_page(png_print_page);
+private dev_proc_open_device(pngalpha_open);
+private dev_proc_encode_color(pngalpha_encode_color);
+private dev_proc_decode_color(pngalpha_decode_color);
+private dev_proc_copy_alpha(pngalpha_copy_alpha);
+private dev_proc_fill_rectangle(pngalpha_fill_rectangle);
+private dev_proc_put_params(pngalpha_put_params);
+private dev_proc_create_buf_device(pngalpha_create_buf_device);
 
 /* Monochrome. */
 
@@ -126,6 +134,108 @@
 	   0, 0, 0, 0,		/* margins */
 	   24, png_print_page);
 
+/* 32-bit RGBA */
+/* pngalpha device is 32-bit RGBA, with the alpha channel
+ * indicating pixel coverage, not true transparency.  
+ * Anti-aliasing is enabled by default.
+ * An erasepage will erase to transparent, not white.
+ * It is intended to be used for creating web graphics with
+ * a transparent background.
+ */
+typedef struct gx_device_pngalpha_s gx_device_pngalpha;
+struct gx_device_pngalpha_s {
+    gx_device_common;
+    gx_prn_device_common;
+    dev_t_proc_fill_rectangle((*orig_fill_rectangle), gx_device);
+};
+private const gx_device_procs pngalpha_procs =
+{
+	pngalpha_open,
+	NULL,	/* get_initial_matrix */
+	NULL,	/* sync_output */
+	gdev_prn_output_page,
+	gdev_prn_close,
+	pngalpha_encode_color,	/* map_rgb_color */
+	pngalpha_decode_color,  /* map_color_rgb */
+	pngalpha_fill_rectangle,
+	NULL,	/* tile_rectangle */
+	NULL,	/* copy_mono */
+	NULL,	/* copy_color */
+	NULL,	/* draw_line */
+	NULL,	/* get_bits */
+	gdev_prn_get_params,
+	pngalpha_put_params,
+	NULL,	/* map_cmyk_color */
+	NULL,	/* get_xfont_procs */
+	NULL,	/* get_xfont_device */
+	NULL,	/* map_rgb_alpha_color */
+	gx_page_device_get_page_device,
+	NULL,	/* get_alpha_bits */
+	pngalpha_copy_alpha,
+	NULL,	/* get_band */
+	NULL,	/* copy_rop */
+	NULL,	/* fill_path */
+	NULL,	/* stroke_path */
+	NULL,	/* fill_mask */
+	NULL,	/* fill_trapezoid */
+	NULL,	/* fill_parallelogram */
+	NULL,	/* fill_triangle */
+	NULL,	/* draw_thin_line */
+	NULL,	/* begin_image */
+	NULL,	/* image_data */
+	NULL,	/* end_image */
+	NULL,	/* strip_tile_rectangle */
+	NULL,	/* strip_copy_rop, */
+	NULL,	/* get_clipping_box */
+	NULL,	/* begin_typed_image */
+	NULL,	/* get_bits_rectangle */
+	NULL,	/* map_color_rgb_alpha */
+	NULL,	/* create_compositor */
+	NULL,	/* get_hardware_params */
+	NULL,	/* text_begin */
+	NULL,	/* finish_copydevice */
+	NULL, 	/* begin_transparency_group */
+	NULL, 	/* end_transparency_group */
+	NULL, 	/* begin_transparency_mask */
+	NULL, 	/* end_transparency_mask */
+	NULL, 	/* discard_transparency_layer */
+	gx_default_DevRGB_get_color_mapping_procs,
+	gx_default_DevRGB_get_color_comp_index, 
+	pngalpha_encode_color,
+	pngalpha_decode_color
+};
+
+const gx_device_pngalpha gs_pngalpha_device = {
+	std_device_part1_(gx_device_pngalpha, &pngalpha_procs, "pngalpha",
+		&st_device_printer, open_init_closed),
+	/* color_info */ 
+	{3 /* max components */,
+	 3 /* number components */,
+	 GX_CINFO_POLARITY_ADDITIVE /* polarity */,
+	 32 /* depth */,
+	 -1 /* gray index */,
+	 255 /* max gray */,
+	 255 /* max color */,
+	 256 /* dither grays */,
+	 256 /* dither colors */,
+	 { 4, 4 } /* antialias info text, graphics */,
+	 GX_CINFO_SEP_LIN_NONE /* separable_and_linear */,
+	 { 0 } /* component shift */,
+	 { 0 } /* component bits */,
+	 { 0 } /* component mask */,
+	 "DeviceRGB" /* process color name */,
+	 GX_CINFO_OPMODE_UNKNOWN /* opmode */,
+	 0 /* process_cmps */
+	},
+	std_device_part2_(
+	  (int)((float)(DEFAULT_WIDTH_10THS) * (X_DPI) / 10 + 0.5),
+	  (int)((float)(DEFAULT_HEIGHT_10THS) * (Y_DPI) / 10 + 0.5),
+	   X_DPI, Y_DPI),
+	offset_margin_values(0, 0, 0, 0, 0, 0),
+	std_device_part3_(),
+	prn_device_body_rest_(png_print_page)
+};
+
 
 /* ------ Private definitions ------ */
 
@@ -147,7 +257,7 @@
     int depth = pdev->color_info.depth;
     int y;
     int code;			/* return code */
-    const char *software_key = "Software";
+    char software_key[80];
     char software_text[256];
     png_text text_png;
 
@@ -176,6 +286,11 @@
     info_ptr->phys_unit_type = PNG_RESOLUTION_METER;
     info_ptr->valid |= PNG_INFO_pHYs;
     switch (depth) {
+	case 32:
+	    info_ptr->bit_depth = 8;
+	    info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
+	    png_set_invert_alpha(png_ptr);
+	    break;
 	case 24:
 	    info_ptr->bit_depth = 8;
 	    info_ptr->color_type = PNG_COLOR_TYPE_RGB;
@@ -223,10 +338,11 @@
 	}
     }
     /* add comment */
+    strncpy(software_key, "Software", sizeof(software_key));
     sprintf(software_text, "%s %d.%02d", gs_product,
 	    (int)(gs_revision / 100), (int)(gs_revision % 100));
     text_png.compression = -1;	/* uncompressed */
-    text_png.key = (char *)software_key;	/* not const, unfortunately */
+    text_png.key = software_key;
     text_png.text = software_text;
     text_png.text_length = strlen(software_text);
     info_ptr->text = &text_png;
@@ -276,3 +392,208 @@
 {
 }
 #endif
+
+private int
+pngalpha_open(gx_device * pdev)
+{
+    gx_device_pngalpha *ppdev = (gx_device_pngalpha *)pdev;
+    int code;
+    /* We replace create_buf_device so we can replace copy_alpha 
+     * for memory device, but not clist.
+     */
+    ppdev->printer_procs.buf_procs.create_buf_device = 
+	pngalpha_create_buf_device;
+    code = gdev_prn_open(pdev);
+    /* We intercept fill_rectangle to translate "fill page with white"
+     * into "fill page with transparent".  We then call the original
+     * implementation of fill_page.
+     */
+    if ((ppdev->procs.fill_rectangle != pngalpha_fill_rectangle) &&
+	(ppdev->procs.fill_rectangle != NULL)) {
+	ppdev->orig_fill_rectangle = ppdev->procs.fill_rectangle;
+        ppdev->procs.fill_rectangle = pngalpha_fill_rectangle;
+    }
+    return code;
+}
+
+private int 
+pngalpha_create_buf_device(gx_device **pbdev, gx_device *target,
+   const gx_render_plane_t *render_plane, gs_memory_t *mem,
+   bool for_band)
+{
+    gx_device_printer *ptarget = (gx_device_printer *)target;
+    int code = gx_default_create_buf_device(pbdev, target, 
+	render_plane, mem, for_band);
+    /* Now set copy_alpha to one that handles RGBA */
+    set_dev_proc(*pbdev, copy_alpha, ptarget->orig_procs.copy_alpha);
+    return code;
+}
+
+private int
+pngalpha_put_params(gx_device * pdev, gs_param_list * plist)
+{
+    gx_device_pngalpha *ppdev = (gx_device_pngalpha *)pdev;
+    int code = gdev_prn_put_params(pdev, plist);
+    if ((ppdev->procs.fill_rectangle != pngalpha_fill_rectangle) &&
+	(ppdev->procs.fill_rectangle != NULL)) {
+        /* Get current implementation of fill_rectangle and restore ours.
+	 * Implementation is either clist or memory and can change 
+	 * during put_params.
+	 */
+	ppdev->orig_fill_rectangle = ppdev->procs.fill_rectangle;
+	ppdev->procs.fill_rectangle = pngalpha_fill_rectangle;
+    }
+    return code;
+}
+
+/* RGB mapping for 32-bit RGBA color devices */
+
+private gx_color_index
+pngalpha_encode_color(gx_device * dev, const gx_color_value cv[])
+{
+    /* bits 0-7 are alpha, stored inverted to avoid white/opaque 
+     * being 0xffffffff which is also gx_no_color_index.
+     * So 0xff is transparent and 0x00 is opaque.
+     * We always return opaque colors (bits 0-7 = 0).
+     * Return value is 0xRRGGBB00.
+     */
+    return
+	((uint) gx_color_value_to_byte(cv[2]) << 8) +
+	((ulong) gx_color_value_to_byte(cv[1]) << 16) +
+	((ulong) gx_color_value_to_byte(cv[0]) << 24);
+}
+
+/* Map a color index to a r-g-b color. */
+private int
+pngalpha_decode_color(gx_device * dev, gx_color_index color,
+			     gx_color_value prgb[3])
+{
+    prgb[0] = gx_color_value_from_byte((color >> 24) & 0xff);
+    prgb[1] = gx_color_value_from_byte((color >> 16) & 0xff);
+    prgb[2] = gx_color_value_from_byte((color >> 8)  & 0xff);
+    return 0;
+}
+
+private int
+pngalpha_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
+		  gx_color_index color)
+{
+    gx_device_pngalpha *pdev = (gx_device_pngalpha *)dev;
+    if ((color == 0xffffff00) && (x==0) && (y==0) 
+	&& (w==dev->width) && (h==dev->height)) {
+	/* If filling whole page with white, make it transparent */
+        return pdev->orig_fill_rectangle(dev, x, y, w, h, 0xfefefeff);
+    }
+    return pdev->orig_fill_rectangle(dev, x, y, w, h, color);
+}
+
+/* Implementation for 32-bit RGBA in a memory buffer */
+/* Derived from gx_default_copy_alpha, but now maintains alpha channel. */
+private int
+pngalpha_copy_alpha(gx_device * dev, const byte * data, int data_x,
+	   int raster, gx_bitmap_id id, int x, int y, int width, int height,
+		      gx_color_index color, int depth)
+{				/* This might be called with depth = 1.... */
+    if (depth == 1)
+	return (*dev_proc(dev, copy_mono)) (dev, data, data_x, raster, id,
+					    x, y, width, height,
+					    gx_no_color_index, color);
+    /*
+     * Simulate alpha by weighted averaging of RGB values.
+     * This is very slow, but functionally correct.
+     */
+    {
+	const byte *row;
+	gs_memory_t *mem = dev->memory;
+	int bpp = dev->color_info.depth;
+	int ncomps = dev->color_info.num_components;
+	uint in_size = gx_device_raster(dev, false);
+	byte *lin;
+	uint out_size;
+	byte *lout;
+	int code = 0;
+	gx_color_value color_cv[GX_DEVICE_COLOR_MAX_COMPONENTS];
+	int ry;
+
+	fit_copy(dev, data, data_x, raster, id, x, y, width, height);
+	row = data;
+	out_size = bitmap_raster(width * bpp);
+	lin = gs_alloc_bytes(mem, in_size, "copy_alpha(lin)");
+	lout = gs_alloc_bytes(mem, out_size, "copy_alpha(lout)");
+	if (lin == 0 || lout == 0) {
+	    code = gs_note_error(gs_error_VMerror);
+	    goto out;
+	}
+	(*dev_proc(dev, decode_color)) (dev, color, color_cv);
+	for (ry = y; ry < y + height; row += raster, ++ry) {
+	    byte *line;
+	    int sx, rx;
+
+	    DECLARE_LINE_ACCUM_COPY(lout, bpp, x);
+
+	    code = (*dev_proc(dev, get_bits)) (dev, ry, lin, &line);
+	    if (code < 0)
+		break;
+	    for (sx = data_x, rx = x; sx < data_x + width; ++sx, ++rx) {
+		gx_color_index previous = gx_no_color_index;
+		gx_color_index composite;
+		int alpha2, alpha;
+
+		if (depth == 2)	/* map 0 - 3 to 0 - 15 */
+		    alpha = ((row[sx >> 2] >> ((3 - (sx & 3)) << 1)) & 3) * 5;
+		else
+		    alpha2 = row[sx >> 1],
+			alpha = (sx & 1 ? alpha2 & 0xf : alpha2 >> 4);
+		if (alpha == 15) {	/* Just write the new color. */
+		    composite = color;
+		} else {
+		    if (previous == gx_no_color_index) {	/* Extract the old color. */
+			const byte *src = line + (rx * (bpp >> 3));
+			previous = 0;
+			previous += (gx_color_index) * src++ << 24;
+			previous += (gx_color_index) * src++ << 16;
+			previous += (gx_color_index) * src++ << 8;
+			previous += *src++;
+		    }
+		    if (alpha == 0) {	/* Just write the old color. */
+			composite = previous;
+		    } else {	/* Blend values. */
+			gx_color_value cv[GX_DEVICE_COLOR_MAX_COMPONENTS];
+			int i;
+			int old_coverage;
+			int new_coverage;
+
+			(*dev_proc(dev, decode_color)) (dev, previous, cv);
+			/* decode color doesn't give us coverage */
+			cv[3] = previous & 0xff;
+			old_coverage = 255 - cv[3];
+			new_coverage = 
+			    (255 * alpha + old_coverage * (15 - alpha)) / 15;
+			for (i=0; i<ncomps; i++)
+			    cv[i] = min(((255 * alpha * color_cv[i]) + 
+				(old_coverage * (15 - alpha ) * cv[i]))
+				/ (new_coverage * 15), gx_max_color_value);
+			composite =
+			    (*dev_proc(dev, encode_color)) (dev, cv);
+			/* encode color doesn't include coverage */
+			composite |= (255 - new_coverage) & 0xff;
+			
+			/* composite can never be gx_no_color_index
+			 * because pixel is never completely transparent
+			 * (low byte != 0xff).
+			 */
+		    }
+		}
+		LINE_ACCUM(composite, bpp);
+	    }
+	    LINE_ACCUM_COPY(dev, lout, bpp, x, rx, raster, ry);
+	}
+      out:gs_free_object(mem, lout, "copy_alpha(lout)");
+	gs_free_object(mem, lin, "copy_alpha(lin)");
+	return code;
+    }
+
+    /* shouldn't reach */
+    return_error(gs_error_unknownerror);
+}
+

Index: gdevprn.h
===================================================================
RCS file: /cvs/ghostscript/gs/src/gdevprn.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- gdevprn.h	22 Aug 2002 07:12:28 -0000	1.12
+++ gdevprn.h	11 Mar 2003 11:36:41 -0000	1.13
@@ -331,6 +331,7 @@
 	NULL,	/* strip_copy_rop, */\
 	NULL,	/* get_clipping_box */\
 	NULL,	/* begin_typed_image */\
+	NULL,	/* get_bits_rectangle */\
 	NULL,	/* map_color_rgb_alpha */\
 	NULL,	/* create_compositor */\
 	NULL,	/* get_hardware_params */\

Index: macosx.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/macosx.mak,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- macosx.mak	11 Jan 2003 04:27:41 -0000	1.16
+++ macosx.mak	11 Mar 2003 11:36:41 -0000	1.17
@@ -383,8 +383,8 @@
 DEVICE_DEVS10=
 DEVICE_DEVS11=
 DEVICE_DEVS12=
-#DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev
-DEVICE_DEVS13=$(DD)png16.dev $(DD)png256.dev
+#DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
+DEVICE_DEVS13=$(DD)png16.dev $(DD)png256.dev $(DD)pngalpha.dev
 DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
 DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
 DEVICE_DEVS16=$(DD)bbox.dev

Index: msvc32.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/msvc32.mak,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- msvc32.mak	22 Jan 2003 07:34:27 -0000	1.40
+++ msvc32.mak	11 Mar 2003 11:36:41 -0000	1.41
@@ -512,7 +512,7 @@
 DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
 DEVICE_DEVS11=$(DD)bmpmono.dev $(DD)bmpgray.dev $(DD)bmp16.dev $(DD)bmp256.dev $(DD)bmp16m.dev $(DD)tiff12nc.dev $(DD)tiff24nc.dev
 DEVICE_DEVS12=$(DD)psmono.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
-DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev
+DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
 DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
 DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
 DEVICE_DEVS16=$(DD)bbox.dev

Index: openvms.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/openvms.mak,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- openvms.mak	1 Mar 2003 13:59:38 -0000	1.28
+++ openvms.mak	11 Mar 2003 11:36:41 -0000	1.29
@@ -226,7 +226,7 @@
 DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
 DEVICE_DEVS11=$(DD)tiff12nc.dev $(DD)tiff24nc.dev
 DEVICE_DEVS12=$(DD)psmono.dev $(DD)psgray.dev $(DD)psrgb.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
-DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev
+DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
 DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
 DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
 DEVICE_DEVS16=$(DD)bbox.dev

Index: os2.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/os2.mak,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- os2.mak	31 Oct 2002 09:22:13 -0000	1.29
+++ os2.mak	11 Mar 2003 11:36:41 -0000	1.30
@@ -488,7 +488,7 @@
 DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
 DEVICE_DEVS11=$(DD)bmpmono.dev $(DD)bmp16.dev $(DD)bmp256.dev $(DD)bmp16m.dev $(DD)tiff12nc.dev $(DD)tiff24nc.dev
 DEVICE_DEVS12=$(DD)psmono.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
-DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev
+DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
 DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
 DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
 DEVICE_DEVS16=$(DD)bbox.dev

Index: unix-gcc.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/unix-gcc.mak,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -d -r1.38 -r1.39
--- unix-gcc.mak	24 Oct 2002 12:57:57 -0000	1.38
+++ unix-gcc.mak	11 Mar 2003 11:36:41 -0000	1.39
@@ -398,7 +398,7 @@
 DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
 DEVICE_DEVS11=$(DD)tiff12nc.dev $(DD)tiff24nc.dev
 DEVICE_DEVS12=$(DD)psmono.dev $(DD)psgray.dev $(DD)psrgb.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
-DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev
+DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
 DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
 DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
 DEVICE_DEVS16=$(DD)bbox.dev

Index: unixansi.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/unixansi.mak,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- unixansi.mak	31 Oct 2002 09:22:13 -0000	1.27
+++ unixansi.mak	11 Mar 2003 11:36:41 -0000	1.28
@@ -343,7 +343,7 @@
 DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
 DEVICE_DEVS11=$(DD)tiff12nc.dev $(DD)tiff24nc.dev
 DEVICE_DEVS12=$(DD)psmono.dev $(DD)psgray.dev $(DD)psrgb.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
-DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev
+DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
 DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
 DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
 DEVICE_DEVS16=$(DD)bbox.dev

Index: watcw32.mak
===================================================================
RCS file: /cvs/ghostscript/gs/src/watcw32.mak,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- watcw32.mak	31 Oct 2002 10:51:29 -0000	1.22
+++ watcw32.mak	11 Mar 2003 11:36:41 -0000	1.23
@@ -249,7 +249,7 @@
 DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev
 DEVICE_DEVS11=$(DD)bmpmono.dev $(DD)bmp16.dev $(DD)bmp256.dev $(DD)bmp16m.dev $(DD)tiff12nc.dev $(DD)tiff24nc.dev
 DEVICE_DEVS12=$(DD)psmono.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev
-DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev
+DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev
 DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev
 DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev
 # Overflow for DEVS3,4,5,6,9




More information about the gs-cvs mailing list