[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