summaryrefslogtreecommitdiff
path: root/gs/base/gscsepr.c
diff options
context:
space:
mode:
authorRobin Watts <robin.watts@artifex.com>2012-04-27 18:46:27 +0100
committerMichael Vrhel <michael.vrhel@artifex.com>2012-04-29 08:49:49 -0700
commit60640aeb33b18f9a9fcd76fc6f1083d7c7635f24 (patch)
tree33a57c250203465c9e754ef9ddba901cac045030 /gs/base/gscsepr.c
parentdd09a0706ab09a54f5fbb05c63420c86375b45bf (diff)
downloadghostpdl-60640aeb33b18f9a9fcd76fc6f1083d7c7635f24.tar.gz
* Change of the tiffsep and psdcmyk device to planar devices.
This change in these devices was made to remove the 64 bit limitation of our existing color encoding which limits us to 8 colorants without compressed color encoding. The motivation for this work is that even with compressed color encoding we were starting to encounter files with transparency in particular that exceeded the capabilities of encoding, leading to dropped colors. With this fix, we encode through the clist the DeviceN color values. The buffers for the devices are maintained as planar buffers and fills occur with the high level device colors. Support was added to handle the devn color type through the shading code. The old code would have supported only 8 colorants in a shading. Support was also added to the transparency code to enable the use of the put_image procedure which for the planar device saves quite a bit of time since we can do the copy_planes proc directly from the pdf14 planar buffer to the planar memory device buffer. The pdf14 device also had to support fill_rectangle_hl_color. Changes were also made to the pattern tiling code so that we avoid any planar to chunky and back to planar conversions. These were being done to handle ROPs. Even when there were not any ROPs to perform we were going through strip_tile_rop operations since the gx_default_strip_tile_rectangle did not support planar to planar. That support is added with this commit. Support had to be added to the overprint compositor to support the new color type with fill_rectangle_hl_color. Support had to be added to the clist for fill_rectangle_hl_color. This required changes on both the writing and reading side. It is possible that the amount of data written for these commands could be reduced and that is commented in the code. Support also had to be added to the clip device and the mask_clip device as well for uncolored patterns. Also the tile clip device required support and the transparency device required support for copy_planes. This last function needs to be optimized. Both of the separation devices (tiffsep and psdcmyk) that we currently have are updated to support this method. There is an #if option in each device file to return the code back to the old chunky format. A new device procedure for handling strip tiling of masks with devn colors had to be added. Functionality was only required for the mem planar and clist devices. Also, it was found that the tiffsep and psdcmyk devices were maintaining separations (spot colors) across pages. That is if page 1 had a spot color, subsequent pages created a separation for that spot even if those pages did not contain it. This was fixed so that separations for a page are only created for the spots that occur on that page. A fix was also made to ensure that we had proper handling for the None colorants when they are part of the DeviceN color space.
Diffstat (limited to 'gs/base/gscsepr.c')
-rw-r--r--gs/base/gscsepr.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gs/base/gscsepr.c b/gs/base/gscsepr.c
index f377b225a..021109758 100644
--- a/gs/base/gscsepr.c
+++ b/gs/base/gscsepr.c
@@ -449,7 +449,7 @@ check_Separation_component_name(const gs_color_space * pcs, gs_state * pgs)
*/
colorant_number = (*dev_proc(dev, get_color_comp_index))
(dev, (const char *)pname, name_size, SEPARATION_NAME);
- if (colorant_number >= 0) { /* If valid colorant name */
+ if (colorant_number >= 0 && colorant_number < dev->color_info.max_components) { /* If valid colorant name */
pcolor_component_map->color_map[0] =
(colorant_number == GX_DEVICE_COLOR_MAX_COMPONENTS) ? -1
: colorant_number;