[gs-commits] rev 12233 - in trunk/gs: base psi

robin at ghostscript.com robin at ghostscript.com
Thu Mar 3 20:23:44 UTC 2011


Author: robin
Date: 2011-03-03 20:23:43 +0000 (Thu, 03 Mar 2011)
New Revision: 12233

Modified:
   trunk/gs/base/devs.mak
   trunk/gs/base/gdevpbm.c
   trunk/gs/base/unix-gcc.mak
   trunk/gs/psi/msvc.mak
Log:
Add new pamcmyk4 device. Identical to pamcmyk32 device, but works in 1 bit
per component, rather than 8.

No cluster differences expected as this code isn't tested.

Modified: trunk/gs/base/devs.mak
===================================================================
--- trunk/gs/base/devs.mak	2011-03-03 17:51:48 UTC (rev 12232)
+++ trunk/gs/base/devs.mak	2011-03-03 20:23:43 UTC (rev 12233)
@@ -140,6 +140,7 @@
 #	jpeggray  JPEG format, gray output
 #	jpegcmyk  JPEG format, cmyk output
 #	miff24	ImageMagick MIFF format, 24-bit direct color, RLE compressed
+#	pamcmyk4 	Portable Arbitrary Map file format 4-bit CMYK
 #	pamcmyk32	Portable Arbitrary Map file format 32-bit CMYK
 #	pcxmono	PCX file format, monochrome (1-bit black and white)
 #	pcxgray	PCX file format, 8-bit gray scale
@@ -1484,6 +1485,9 @@
 
 ### Portable Arbitrary Map (PAM, magic number "P7", CMYK)
 
+$(DD)pamcmyk4.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev
+	$(SETPDEV2) $(DD)pamcmyk4 $(pxm_)
+
 $(DD)pamcmyk32.dev : $(DEVS_MAK) $(pxm_) $(GLD)page.dev
 	$(SETPDEV2) $(DD)pamcmyk32 $(pxm_)
 

Modified: trunk/gs/base/gdevpbm.c
===================================================================
--- trunk/gs/base/gdevpbm.c	2011-03-03 17:51:48 UTC (rev 12232)
+++ trunk/gs/base/gdevpbm.c	2011-03-03 20:23:43 UTC (rev 12233)
@@ -41,6 +41,7 @@
  *        otherwise PPM.
  *      pkm[raw] - computes internally in CMYK, outputs PPM (RGB).
  *      pksm[raw] - computes internally in CMYK, outputs 4 PBM pages.
+ *      pamcmyk4 - outputs CMYK as PAM 1-bit per color
  *      pamcmyk32 - outputs CMYK as PAM 8-bits per color
  *      pam - previous name for the pamcmyk32 device retained for backwards compatibility
  *      plan9bm - outputs Plan 9 bitmap format.
@@ -57,7 +58,7 @@
  *      ppmraw, pnmraw: 4(3x1), 8(3x2), 16(3x5), 24(3x8).  [3-24]
  *      pkm, pkmraw: 4(4x1), 8(4x2), 16(4x4), 32(4x8).  [4-32]
  *      pksm, pksmraw: ibid.
- *      pam: 32 (CMYK)
+ *      pam: 32 (CMYK), 4 (CMYK)
  */
 
 /* Structure for P*M devices, which extend the generic printer device. */
@@ -127,11 +128,8 @@
 static dev_proc_print_page(psm_print_page);
 static dev_proc_print_page(psm_print_page);
 static dev_proc_print_page(pam_print_page);
+static dev_proc_print_page(pam4_print_page);
 
-static int pam_print_row(gx_device_printer * pdev, byte * data, int depth,
-               FILE * pstream);
-static int pam_print_page(gx_device_printer * pdev, FILE * pstream);
-
 /* The device procedures */
 
 /* See gdevprn.h for the template for the following. */
@@ -207,6 +205,9 @@
 const gx_device_pbm gs_pamcmyk32_device =
 pbm_prn_device(pam_procs, "pamcmyk32", '7', 1, 4, 32, 255, 255, 0,
                X_DPI, Y_DPI, pam_print_page);
+const gx_device_pbm gs_pamcmyk4_device =
+pbm_prn_device(pam_procs, "pamcmyk4", '7', 1, 4, 4, 1, 1, 0,
+               X_DPI, Y_DPI, pam4_print_page);
 /* Also keep the old device name so anyone using it won't be surprised */
 const gx_device_pbm gs_pam_device =
 pbm_prn_device(pam_procs, "pam", '7', 1, 4, 32, 255, 255, 0,
@@ -235,12 +236,12 @@
         set_dev_proc(pdev, begin_typed_image, pnm_begin_typed_image);
     }
     if (bdev->color_info.num_components == 4) {
-        if (bdev->magic == 7) {
+        if (bdev->color_info.depth == 4) {
+            set_dev_proc(pdev, map_color_rgb, cmyk_1bit_map_color_rgb);
+            set_dev_proc(pdev, map_cmyk_color, cmyk_1bit_map_cmyk_color);
+        } else if (bdev->magic == 7) {
             set_dev_proc(pdev, map_color_rgb, cmyk_8bit_map_color_rgb);
             set_dev_proc(pdev, map_cmyk_color, cmyk_8bit_map_cmyk_color);
-        } else if (bdev->color_info.depth == 4) {
-            set_dev_proc(pdev, map_color_rgb, cmyk_1bit_map_color_rgb);
-            set_dev_proc(pdev, map_cmyk_color, cmyk_1bit_map_cmyk_color);
         } else {
             set_dev_proc(pdev, map_color_rgb, pkm_map_color_rgb);
             set_dev_proc(pdev, map_cmyk_color, pkm_map_cmyk_color);
@@ -1002,6 +1003,38 @@
                                 pam_print_row);
 }
 
+static int
+pam4_print_row(gx_device_printer * pdev, byte * data, int depth,
+               FILE * pstream)
+{
+    int w, s;
+    if (depth == 4) {
+        for (w = pdev->width; w > 0;) {
+            byte C = *data++;
+            for (s = 7; s >= 0; s -= 4)
+            {
+                fputc((C>>s    )&1, pstream);
+                fputc((C>>(s-1))&1, pstream);
+                fputc((C>>(s-2))&1, pstream);
+                fputc((C>>(s-3))&1, pstream);
+                w--;
+                if (w == 0)
+                    break;
+            }
+        }
+    }
+    return 0;
+}
+
+static int
+pam4_print_page(gx_device_printer * pdev, FILE * pstream)
+{
+    gx_device_pbm * const bdev = (gx_device_pbm *)pdev;
+
+    return pbm_print_page_loop(pdev, bdev->magic, pstream,
+                               pam4_print_row);
+}
+
 /* Print a faux CMYK page. */
 /* Print a row where each pixel occupies 4 bits (depth == 4). */
 /* In this case, we also know pdev->color_info.max_color == 1. */

Modified: trunk/gs/base/unix-gcc.mak
===================================================================
--- trunk/gs/base/unix-gcc.mak	2011-03-03 17:51:48 UTC (rev 12232)
+++ trunk/gs/base/unix-gcc.mak	2011-03-03 20:23:43 UTC (rev 12233)
@@ -409,8 +409,8 @@
 DEVICE_DEVS17=
 DEVICE_DEVS18=
 DEVICE_DEVS19=
-DEVICE_DEVS20=$(DD)cljet5.dev $(DD)cljet5c.dev
-DEVICE_DEVS21=$(DD)spotcmyk.dev $(DD)devicen.dev $(DD)xcf.dev $(DD)bmpsep1.dev $(DD)bmpsep8.dev $(DD)bmp16m.dev $(DD)bmp32b.dev $(DD)psdcmyk.dev $(DD)psdrgb.dev $(DD)pamcmyk32.dev
+DEVICE_DEVS20=$(DD)cljet5.dev $(DD)cljet5c.dev $(DD)pamcmyk32.dev $(DD)pamcmyk4.dev
+DEVICE_DEVS21=$(DD)spotcmyk.dev $(DD)devicen.dev $(DD)xcf.dev $(DD)bmpsep1.dev $(DD)bmpsep8.dev $(DD)bmp16m.dev $(DD)bmp32b.dev $(DD)psdcmyk.dev $(DD)psdrgb.dev
 
 # Shared library target to build.
 # Note that the two vga devices are Linux specific, and requires svgalib

Modified: trunk/gs/psi/msvc.mak
===================================================================
--- trunk/gs/psi/msvc.mak	2011-03-03 17:51:48 UTC (rev 12232)
+++ trunk/gs/psi/msvc.mak	2011-03-03 20:23:43 UTC (rev 12233)
@@ -844,7 +844,7 @@
 DEVICE_DEVS17=$(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev 
 DEVICE_DEVS18=$(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev $(DD)jetp3852.dev $(DD)r4081.dev
 DEVICE_DEVS19=$(DD)lbp8.dev $(DD)m8510.dev $(DD)necp6.dev $(DD)bjc600.dev $(DD)bjc800.dev
-DEVICE_DEVS20=$(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)pamcmyk32.dev
+DEVICE_DEVS20=$(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)pamcmyk32.dev $(DD)pamcmyk4.dev
 DEVICE_DEVS21= $(DD)spotcmyk.dev $(DD)devicen.dev $(DD)bmpsep1.dev $(DD)bmpsep8.dev $(DD)bmp16m.dev $(DD)bmp32b.dev $(DD)psdcmyk.dev $(DD)psdrgb.dev
 !endif
 



More information about the gs-commits mailing list