#! /bin/sh /usr/share/dpatch/dpatch-run
## 62_onebitcmyk-pdf.dpatch by  <till.kamppeter@gmail.com>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: No description.

@DPATCH@
diff -urNad ghostscript-8.63.dfsg.1~/src/gxipixel.c ghostscript-8.63.dfsg.1/src/gxipixel.c
--- ghostscript-8.63.dfsg.1~/src/gxipixel.c	2008-02-20 22:02:48.000000000 +0100
+++ ghostscript-8.63.dfsg.1/src/gxipixel.c	2008-11-26 11:24:59.000000000 +0100
@@ -708,13 +708,19 @@
 		  const gs_imager_state * pis, gx_device * dev,
 		  const gs_color_space * pcs, bool * pdcb)
 {
-    int ci;
+    int ci, decode_type;
     static const float default_decode[] = {
 	0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0
     };
 
     image_init_clues(penum, bps, spp);
 
+    decode_type = 3; /* 0=custom, 1=identity, 2=inverted, 3=impossible */
+    for (ci = 0; ci < spp; ci +=2 ) {
+        decode_type &= (decode[ci] == 0. && decode[ci + 1] == 1.) |
+                       (decode[ci] == 1. && decode[ci + 1] == 0.) << 1; 
+    }
+
     /* Initialize the maps from samples to intensities. */
     for (ci = 0; ci < spp; ci++) {
 	sample_map *pmap = &penum->map[ci];
@@ -728,19 +734,15 @@
 					/* construct the expansion map */
 	const float *real_decode;	/* decoding for expanded samples */
 
-	bool no_decode;
-
 	map_decode = real_decode = this_decode;
-	if (map_decode[0] == 0.0 && map_decode[1] == 1.0)
-	    no_decode = true;
-	else if (map_decode[0] == 1.0 && map_decode[1] == 0.0 && bps <= 8) {
-	    no_decode = true;
-	    real_decode = default_decode;
-	} else {
-	    no_decode = false;
-	    *pdcb = false;
-	    map_decode = default_decode;
-	}
+	if (!(decode_type & 1)) {
+	    if ((decode_type & 2) && bps <= 8) {
+	        real_decode = default_decode;
+	    } else {
+	        *pdcb = false;
+	        map_decode = default_decode;
+	    }
+        }
 	if (bps > 2 || format != gs_image_format_chunky) {
 	    if (bps <= 8)
 		image_init_map(&pmap->table.lookup8[0], 1 << bps,
@@ -783,7 +785,7 @@
 	    (real_decode[1] - real_decode[0]) /
 	    (bps <= 8 ? 255.0 : (float)frac_1);
 	pmap->decode_max /* = decode_lookup[15] */  = real_decode[1];
-	if (no_decode) {
+	if (decode_type) {
 	    pmap->decoding = sd_none;
 	    pmap->inverted = map_decode[0] != 0;
 	} else if (bps <= 4) {
