summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorRobin Watts <Robin.Watts@artifex.com>2021-06-18 18:16:10 +0100
committerRobin Watts <Robin.Watts@artifex.com>2021-06-21 20:10:53 +0100
commit160687dbf18e9fe84ad453e33284eca7b906fffb (patch)
tree47b12b90d69af5f4bde8cba76ceef21e5805a316 /base
parent3406eb17fb001f76eeca6c08dce72f25175f10fe (diff)
downloadghostpdl-160687dbf18e9fe84ad453e33284eca7b906fffb.tar.gz
Move pXm devices to use encode/decode_color.
This seems to fix pbmraw, pamcmyk32 and pnmcmyk.
Diffstat (limited to 'base')
-rw-r--r--base/gdevdgbr.c2
-rw-r--r--base/gdevdrop.c2
-rw-r--r--base/gxcmap.c30
-rw-r--r--base/gxdevice.h4
4 files changed, 36 insertions, 2 deletions
diff --git a/base/gdevdgbr.c b/base/gdevdgbr.c
index 3ea656417..52fba8794 100644
--- a/base/gdevdgbr.c
+++ b/base/gdevdgbr.c
@@ -448,7 +448,7 @@ gx_get_bits_native_to_std(gx_device * dev, int x, int w, int h,
}
mapped[pixel] = dest;
}
- (*dev_proc(dev, map_color_rgb)) (dev, pixel, rgba);
+ (*dev_proc(dev, decode_color)) (dev, pixel, rgba);
if (options & GB_ALPHA_FIRST)
*dest++ = 0xff;
/* Convert to the requested color space. */
diff --git a/base/gdevdrop.c b/base/gdevdrop.c
index b2c1234f8..bf9ab5b44 100644
--- a/base/gdevdrop.c
+++ b/base/gdevdrop.c
@@ -241,7 +241,7 @@ unpack_colors_to_standard(gx_device * dev, gx_color_index real_colors[2],
gx_color_value rgb[3];
gx_color_index pixel;
- (*dev_proc(dev, map_color_rgb)) (dev, colors[i], rgb);
+ (*dev_proc(dev, decode_color)) (dev, colors[i], rgb);
pixel = gx_color_value_to_byte(rgb[0]);
if (depth > 8) {
pixel = (pixel << 16) +
diff --git a/base/gxcmap.c b/base/gxcmap.c
index 7d7ea8bd4..eec838fba 100644
--- a/base/gxcmap.c
+++ b/base/gxcmap.c
@@ -1753,6 +1753,21 @@ gx_default_w_b_map_color_rgb(gx_device * dev, gx_color_index color,
return 0;
}
+gx_color_index
+gx_default_w_b_gray_encode_color(gx_device *dev, const gx_color_value cv[])
+{
+ return cv[0] > gx_max_color_value / 2 ? (gx_color_index)1
+ : (gx_color_index)0;
+}
+
+int
+gx_default_w_b_gray_decode_color(gx_device * dev, gx_color_index color,
+ gx_color_value pgray[1])
+{ /* Map 0 to max_value, 1 to 0. */
+ pgray[0] = -(gx_color_value) color;
+ return 0;
+}
+
/* Black-on-white */
gx_color_index
gx_default_b_w_map_rgb_color(gx_device * dev, const gx_color_value cv[])
@@ -1774,6 +1789,21 @@ gx_default_b_w_map_color_rgb(gx_device * dev, gx_color_index color,
return 0;
}
+gx_color_index
+gx_default_b_w_gray_encode_color(gx_device *dev, const gx_color_value cv[])
+{
+ return cv[0] > gx_max_color_value / 2 ? (gx_color_index)0
+ : (gx_color_index)1;
+}
+
+int
+gx_default_b_w_gray_decode_color(gx_device * dev, gx_color_index color,
+ gx_color_value pgray[1])
+{ /* Map 0 to max_value, 1 to 0. */
+ pgray[0] = -((gx_color_value) color ^ 1);
+ return 0;
+}
+
/* RGB mapping for gray-scale devices */
gx_color_index
diff --git a/base/gxdevice.h b/base/gxdevice.h
index 9a389af38..452255e9a 100644
--- a/base/gxdevice.h
+++ b/base/gxdevice.h
@@ -250,6 +250,8 @@ dev_proc_output_page(gx_default_output_page);
dev_proc_close_device(gx_default_close_device);
dev_proc_map_rgb_color(gx_default_w_b_map_rgb_color);
dev_proc_map_color_rgb(gx_default_w_b_map_color_rgb);
+dev_proc_encode_color(gx_default_w_b_gray_encode_color);
+dev_proc_decode_color(gx_default_w_b_gray_decode_color);
#define gx_default_map_rgb_color gx_default_w_b_map_rgb_color
#define gx_default_map_color_rgb gx_default_w_b_map_color_rgb
dev_proc_copy_mono(gx_default_copy_mono);
@@ -321,6 +323,8 @@ int gx_default_initialize_device(gx_device *dev);
/* true CMYK, and 1-bit CMYK color. */
dev_proc_map_rgb_color(gx_default_b_w_map_rgb_color);
dev_proc_map_color_rgb(gx_default_b_w_map_color_rgb);
+dev_proc_encode_color(gx_default_b_w_gray_encode_color);
+dev_proc_decode_color(gx_default_b_w_gray_decode_color);
dev_proc_map_rgb_color(gx_default_gray_map_rgb_color);
dev_proc_map_color_rgb(gx_default_gray_map_color_rgb);
dev_proc_map_color_rgb(gx_default_rgb_map_color_rgb);