summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vrhel <michael.vrhel@artifex.com>2012-10-25 16:43:37 -0700
committerMichael Vrhel <michael.vrhel@artifex.com>2012-10-25 20:17:26 -0700
commitf4b2deea2aa129048014771c19ef9fb3c317de7e (patch)
treed81d7748e28add5de5072eb737fcb447e323cc67
parent9c3de1fb29628f83ae7d48238e0dd0f3f35ecda1 (diff)
Addition of support for the black preservation methods in littleCMS
This is for bug 692223. With this commit now have support to specify black preservation on a object level (e.g. graphic, image or text).
-rw-r--r--gs/base/gscms.h2
-rw-r--r--gs/base/gsdparam.c72
-rw-r--r--gs/base/gsicc_cache.c9
-rw-r--r--gs/base/gsicc_manage.c25
-rw-r--r--gs/base/gsicc_manage.h3
-rw-r--r--gs/doc/Use.htm201
6 files changed, 202 insertions, 110 deletions
diff --git a/gs/base/gscms.h b/gs/base/gscms.h
index 2c3555289..f2ee67915 100644
--- a/gs/base/gscms.h
+++ b/gs/base/gscms.h
@@ -161,8 +161,10 @@ typedef enum {
#define gsRI_OVERRIDE 0x4
#define gsBP_OVERRIDE 0x4
+#define gsKP_OVERRIDE 0x4
#define gsRI_MASK 0x3;
#define gsBP_MASK 0x3;
+#define gsKP_MASK 0x3;
/* Enumerate the types of profiles */
typedef enum {
diff --git a/gs/base/gsdparam.c b/gs/base/gsdparam.c
index 399fa1f09..d0d5836d4 100644
--- a/gs/base/gsdparam.c
+++ b/gs/base/gsdparam.c
@@ -77,6 +77,7 @@ gx_default_get_params(gx_device * dev, gs_param_list * plist)
gs_param_string proof_profile, link_profile, icc_colorants;
gsicc_rendering_intents_t profile_intents[NUM_DEVICE_PROFILES];
gsicc_blackptcomp_t blackptcomps[NUM_DEVICE_PROFILES];
+ gsicc_blackpreserve_t blackpreserve[NUM_DEVICE_PROFILES];
bool devicegraytok = true; /* Default if device profile stuct not set */
bool usefastcolor = false; /* set for unmanaged color */
bool sim_overprint = false;
@@ -144,11 +145,13 @@ gx_default_get_params(gx_device * dev, gs_param_list * plist)
param_string_from_string(profile_array[k], null_str);
profile_intents[k] = gsRINOTSPECIFIED;
blackptcomps[k] = gsBPNOTSPECIFIED;
+ blackpreserve[k] = gsBKPRESNOTSPECIFIED;
} else {
param_string_from_string(profile_array[k],
dev_profile->device_profile[k]->name);
profile_intents[k] = dev_profile->rendercond[k].rendering_intent;
blackptcomps[k] = dev_profile->rendercond[k].black_point_comp;
+ blackpreserve[k] = dev_profile->rendercond[k].preserve_black;
}
}
/* The proof and link profile */
@@ -189,6 +192,7 @@ gx_default_get_params(gx_device * dev, gs_param_list * plist)
param_string_from_string(profile_array[k], null_str);
profile_intents[k] = gsRINOTSPECIFIED;
blackptcomps[k] = gsBPNOTSPECIFIED;
+ blackpreserve[k] = gsBKPRESNOTSPECIFIED;
}
param_string_from_string(proof_profile, null_str);
param_string_from_string(link_profile, null_str);
@@ -236,9 +240,13 @@ gx_default_get_params(gx_device * dev, gs_param_list * plist)
(code = param_write_int(plist,"ImageIntent", (const int *) &(profile_intents[2]))) < 0 ||
(code = param_write_int(plist,"TextIntent", (const int *) &(profile_intents[3]))) < 0 ||
(code = param_write_int(plist,"BlackPtComp", (const int *) (&(blackptcomps[0])))) < 0 ||
- (code = param_write_int(plist,"GraphBlackPt", (const int *) &(blackptcomps[1]))) < 0 ||
+ (code = param_write_int(plist,"GraphicBlackPt", (const int *) &(blackptcomps[1]))) < 0 ||
(code = param_write_int(plist,"ImageBlackPt", (const int *) &(blackptcomps[2]))) < 0 ||
(code = param_write_int(plist,"TextBlackPt", (const int *) &(blackptcomps[3]))) < 0 ||
+ (code = param_write_int(plist,"KPreserve", (const int *) (&(blackpreserve[0])))) < 0 ||
+ (code = param_write_int(plist,"GraphicKPreserve", (const int *) &(blackpreserve[1]))) < 0 ||
+ (code = param_write_int(plist,"ImageKPreserve", (const int *) &(blackpreserve[2]))) < 0 ||
+ (code = param_write_int(plist,"TextKPreserve", (const int *) &(blackpreserve[3]))) < 0 ||
(code = param_write_int_array(plist, "HWSize", &hwsa)) < 0 ||
(code = param_write_float_array(plist, ".HWMargins", &hwma)) < 0 ||
(code = param_write_float_array(plist, ".MarginsHWResolution", &mhwra)) < 0 ||
@@ -652,6 +660,36 @@ gx_default_put_intent(gsicc_rendering_intents_t icc_intent, gx_device * dev,
}
static void
+gx_default_put_blackpreserve(gsicc_blackpreserve_t blackpreserve, gx_device * dev,
+ gsicc_profile_types_t index)
+{
+ int code;
+ cmm_dev_profile_t *profile_struct;
+
+ if (dev->procs.get_profile == NULL) {
+ /* This is an odd case where the device has not yet fully been
+ set up with its procedures yet. We want to make sure that
+ we catch this so we assume here that we are dealing with
+ the target device */
+ if (dev->icc_struct == NULL) {
+ /* Intializes the device structure. Not the profile though for index */
+ dev->icc_struct = gsicc_new_device_profile_array(dev->memory);
+ }
+ code = gsicc_set_device_blackpreserve(dev, blackpreserve, index);
+ } else {
+ code = dev_proc(dev, get_profile)(dev, &profile_struct);
+ if (profile_struct == NULL) {
+ /* Create now */
+ dev->icc_struct = gsicc_new_device_profile_array(dev->memory);
+ }
+ code = gsicc_set_device_blackpreserve(dev, blackpreserve, index);
+ }
+}
+
+
+
+
+static void
gx_default_put_blackptcomp(gsicc_blackptcomp_t blackptcomp, gx_device * dev,
gsicc_profile_types_t index)
{
@@ -759,6 +797,7 @@ gx_default_put_params(gx_device * dev, gs_param_list * plist)
int mpbm = dev->MaxPatternBitmap;
int rend_intent[NUM_DEVICE_PROFILES];
int blackptcomp[NUM_DEVICE_PROFILES];
+ int blackpreserve[NUM_DEVICE_PROFILES];
gs_param_string cms;
int leadingedge = dev->LeadingEdge;
int k;
@@ -775,6 +814,7 @@ gx_default_put_params(gx_device * dev, gs_param_list * plist)
for (k = 0; k < NUM_DEVICE_PROFILES; k++) {
rend_intent[k] = dev->icc_struct->rendercond[k].rendering_intent;
blackptcomp[k] = dev->icc_struct->rendercond[k].black_point_comp;
+ blackpreserve[k] = dev->icc_struct->rendercond[k].preserve_black;
}
devicegraytok = dev->icc_struct->devicegraytok;
usefastcolor = dev->icc_struct->usefastcolor;
@@ -784,6 +824,7 @@ gx_default_put_params(gx_device * dev, gs_param_list * plist)
for (k = 0; k < NUM_DEVICE_PROFILES; k++) {
rend_intent[k] = gsRINOTSPECIFIED;
blackptcomp[k] = gsBPNOTSPECIFIED;
+ blackpreserve[k] = gsBKPRESNOTSPECIFIED;
}
}
@@ -1009,7 +1050,7 @@ nce:
ecode = code;
param_signal_error(plist, param_name, ecode);
}
- if ((code = param_read_int(plist, (param_name = "GraphBlackPt"),
+ if ((code = param_read_int(plist, (param_name = "GraphicBlackPt"),
&(blackptcomp[1]))) < 0) {
ecode = code;
param_signal_error(plist, param_name, ecode);
@@ -1024,6 +1065,26 @@ nce:
ecode = code;
param_signal_error(plist, param_name, ecode);
}
+ if ((code = param_read_int(plist, (param_name = "KPreserve"),
+ &(blackpreserve[0]))) < 0) {
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+ if ((code = param_read_int(plist, (param_name = "GraphicKPreserve"),
+ &(blackpreserve[1]))) < 0) {
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+ if ((code = param_read_int(plist, (param_name = "ImageKPreserve"),
+ &(blackpreserve[2]))) < 0) {
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
+ if ((code = param_read_int(plist, (param_name = "TextKPreserve"),
+ &(blackpreserve[3]))) < 0) {
+ ecode = code;
+ param_signal_error(plist, param_name, ecode);
+ }
if ((code = param_read_bool(plist, (param_name = "DeviceGrayToK"),
&devicegraytok)) < 0) {
ecode = code;
@@ -1243,6 +1304,7 @@ nce:
/* Set the default object */
gx_default_put_intent(rend_intent[0], dev, gsDEFAULTPROFILE);
gx_default_put_blackptcomp(blackptcomp[0], dev, gsDEFAULTPROFILE);
+ gx_default_put_blackpreserve(blackpreserve[0], dev, gsDEFAULTPROFILE);
/* If the default was specified and not a specialized one (e.g. graphic
image or text) then the special one will get set to the default. */
for (k = 1; k < NUM_DEVICE_PROFILES; k++) {
@@ -1258,6 +1320,12 @@ nce:
} else {
gx_default_put_blackptcomp(blackptcomp[k], dev, profile_types[k]);
}
+ if (blackpreserve[0] != gsBKPRESNOTSPECIFIED &&
+ blackpreserve[k] == gsBKPRESNOTSPECIFIED) {
+ gx_default_put_blackpreserve(blackpreserve[0], dev, profile_types[k]);
+ } else {
+ gx_default_put_blackpreserve(blackpreserve[k], dev, profile_types[k]);
+ }
}
}
gx_default_put_graytok(devicegraytok, dev);
diff --git a/gs/base/gsicc_cache.c b/gs/base/gsicc_cache.c
index cb2180b82..7645f9e2c 100644
--- a/gs/base/gsicc_cache.c
+++ b/gs/base/gsicc_cache.c
@@ -590,12 +590,18 @@ gsicc_get_link(const gs_imager_state *pis, gx_device *dev_in,
rendering_params->rendering_intent = render_cond.rendering_intent;
}
}
- /* Similar to the black point compensation */
+ /* Similar for the black point compensation */
if (!(rendering_params->black_point_comp & gsBP_OVERRIDE)) {
if (render_cond.black_point_comp != gsBPNOTSPECIFIED) {
rendering_params->black_point_comp = render_cond.black_point_comp;
}
}
+ /* And the Black preservation */
+ if (!(rendering_params->preserve_black & gsKP_OVERRIDE)) {
+ if (render_cond.preserve_black != gsBPNOTSPECIFIED) {
+ rendering_params->preserve_black = render_cond.preserve_black;
+ }
+ }
devicegraytok = dev_profile->devicegraytok;
}
/* If we are going from DeviceGray to DeviceCMYK and devicegraytok
@@ -603,6 +609,7 @@ gsicc_get_link(const gs_imager_state *pis, gx_device *dev_in,
profiles */
rendering_params->rendering_intent = rendering_params->rendering_intent & gsRI_MASK;
rendering_params->black_point_comp = rendering_params->black_point_comp & gsBP_MASK;
+ rendering_params->preserve_black = rendering_params->preserve_black & gsKP_MASK;
return(gsicc_get_link_profile(pis, dev, gs_input_profile, gs_output_profile,
rendering_params, memory, devicegraytok));
}
diff --git a/gs/base/gsicc_manage.c b/gs/base/gsicc_manage.c
index abe114f1b..45665b196 100644
--- a/gs/base/gsicc_manage.c
+++ b/gs/base/gsicc_manage.c
@@ -472,9 +472,10 @@ gsicc_fill_srcgtag_item(gsicc_rendering_param_t *r_params, bool cmyk)
/* Get the preserve K control */
curr_ptr = strtok(NULL, "\t,\32\n\r");
count = sscanf(curr_ptr, "%d", &preserve_k);
- r_params->preserve_black = preserve_k;
+ r_params->preserve_black = preserve_k | gsKP_OVERRIDE;
+ } else {
+ r_params->preserve_black = gsBKPRESNOTSPECIFIED;
}
-
}
static int
@@ -1161,7 +1162,7 @@ gsicc_new_device_profile_array(gs_memory_t *memory)
result->rendercond[k].rendering_intent = gsRINOTSPECIFIED;
result->rendercond[k].black_point_comp = gsBPNOTSPECIFIED;
result->rendercond[k].override_icc = false;
- result->rendercond[k].preserve_black = gsBLACKPRESERVE_OFF;
+ result->rendercond[k].preserve_black = gsBKPRESNOTSPECIFIED;
result->rendercond[k].graphics_type_tag = GS_UNKNOWN_TAG;
result->rendercond[k].cmm = gsCMM_DEFAULT;
}
@@ -1178,6 +1179,24 @@ gsicc_new_device_profile_array(gs_memory_t *memory)
}
int
+gsicc_set_device_blackpreserve(gx_device *dev, gsicc_blackpreserve_t blackpreserve,
+ gsicc_profile_types_t profile_type)
+{
+ int code;
+ cmm_dev_profile_t *profile_struct;
+
+ if (dev->procs.get_profile == NULL) {
+ profile_struct = dev->icc_struct;
+ } else {
+ code = dev_proc(dev, get_profile)(dev, &profile_struct);
+ }
+ if (profile_struct == NULL)
+ return 0;
+ profile_struct->rendercond[profile_type].preserve_black = blackpreserve;
+ return 0;
+}
+
+int
gsicc_set_device_profile_intent(gx_device *dev, gsicc_rendering_intents_t intent,
gsicc_profile_types_t profile_type)
{
diff --git a/gs/base/gsicc_manage.h b/gs/base/gsicc_manage.h
index 22d3c3399..931815adb 100644
--- a/gs/base/gsicc_manage.h
+++ b/gs/base/gsicc_manage.h
@@ -85,6 +85,9 @@ int gsicc_set_device_profile_intent(gx_device *dev,
int gsicc_set_device_blackptcomp(gx_device *dev,
gsicc_blackptcomp_t blackptcomp,
gsicc_profile_types_t profile_type);
+int gsicc_set_device_blackpreserve(gx_device *dev,
+ gsicc_blackpreserve_t blackpreserve,
+ gsicc_profile_types_t profile_type);
void gsicc_set_devicen_equiv_colors(gx_device *dev, const gs_imager_state * pis,
cmm_profile_t *profile);
int gsicc_set_device_profile_colorants(gx_device *dev, char *name_str);
diff --git a/gs/doc/Use.htm b/gs/doc/Use.htm
index c4de3e1a0..30e2518a6 100644
--- a/gs/doc/Use.htm
+++ b/gs/doc/Use.htm
@@ -2810,10 +2810,43 @@ tool for creating these source profiles is contained in
</dl>
<dl>
+<dt><code>-sOutputICCProfile=</code><em>filename</em>
+<dd>Set the ICC profile that will be associated with
+the output device. Care should be taken to ensure that the
+number of colorants associated with the device is the same
+as the profile. If this is not set, an appropriate profile
+(i.e. one with the proper number of colorants) will be
+selected from those in the directory specified by ICCProfilesDir (see below).
+ Note that if the output device is CMYK + spot colorants, a CMYK
+profile can be used to provide color management for the CMYK colorants only.
+In this case, spot colors will pass through unprocessed assuming the
+device supports those colorants. It is also possible for these devices to
+specify NCLR ICC profiles for output.
+</dl>
+
+<dl>
+<dt><code>-sICCOutputColors=</code><em>"Cyan, Magenta, Yellow, Black, Orange, Violet"</em>
+<dd>For the psdcmyk and tiffsep separation devices, the device ICC profile can
+be an NCLR profile, which means something that includes non-traditional inks
+like Orange, Violet, etc. In this case, the list of the colorant names in the
+order that they exist in the profile must be provided with this command line
+option. Note that if a colorant name that is specified for the profile occurs also within
+the document (e.g. "Orange" above), then these colorants will be associated with
+the same separation. It is possible through a compile time option LIMIT_TO_ICC
+defined in gdevdevn.h to restrict the output colorants of the psdcmyk and tiffsep
+device to the colorants of the ICC profile or to allow additional spot colorants
+in the document to be created as different separations. If restricted, the other
+spot colorants will go through the alternate tint transform and then be mapped to
+the color space defined by the NCLR profile. If an NCLR ICC profile is specified
+and ICCOutputColors is not used, then a set of default names will be used for
+the extra colorants (non-CMYK) in the profile.
+</dl>
+
+<dl>
<dt><code>-sProofProfile=</code><em>filename</em>
<dd>
Enable the specificiation of a proofing profile that will make the
-color manegement system link multiple profiles together to emulate the
+color management system link multiple profiles together to emulate the
device defined by the proofing profile. See the document
<a href="GS9_Color_Management.pdf">GS9 Color Management</a> for details about this option.
</dl>
@@ -2843,70 +2876,33 @@ their own proprietary-based format for spot color management.
This command option is for developer use when an implementation
for named color management is designed for the function
gsicc_transform_named_color located in gsicccache.c . An example
-implementation is currently contained in the code. For the general
-user this command option should really not be used.
-</dl>
-
-<dl>
-<dt><code>-sOutputICCProfile=</code><em>filename</em>
-<dd>Set the ICC profile that will be associated with
-the output device. Care should be taken to ensure that the
-number of colorants associated with the device is the same
-as the profile. If this is not set, an appropriate profile
-(i.e. one with the proper number of colorants) will be
-selected from those in the directory specified by ICCProfilesDir (see below).
- Note that if the output device is CMYK + spot colorants, a CMYK
-profile can be used to provide color management for the CMYK colorants only.
-In this case, spot colors will pass through unprocessed assuming the
-device supports those colorants.
-</dl>
-
-<dl>
-<dt><code>-sOutputICCProfile=</code><em>filename</em>
-<dd>Set the ICC profile that will be associated with
-the output device. Care should be taken to ensure that the
-number of colorants associated with the device is the same
-as the profile. If this is not set, an appropriate profile
-(i.e. one with the proper number of colorants) will be
-selected from those in the directory specified by ICCProfilesDir (see below).
- Note that if the output device is CMYK + spot colorants, a CMYK
-profile can be used to provide color management for the CMYK colorants only.
-In this case, spot colors will pass through unprocessed assuming the
-device supports those colorants.
+implementation is currently contained in the code for the handling of both
+Separation and DeviceN colors. For the general user this command option
+should really not be used.
</dl>
<dl>
-<dt><code>-sICCOutputColors=</code><em>"Cyan, Magenta, Yellow, Black, Orange, Violet"</em>
-<dd>For the psdcmyk and tiffsep separation devices, the device ICC profile can
-be an N-CLR profile, which means something that includes non-traditional inks
-like Orange, Violet, etc. In this case, the list of the colorant names in the
-order that they exist in the profile must be provided with this command line
-option. Note that if a colorant name that is specified for the profile occurs also within
-the document (e.g. "Orange" above), then these colorants will be associated with
-the same separation. It is possible through a compile time option LIMIT_TO_ICC
-defined in gdevdevn.h to restrict the output colorants of the psdcmyk and tiffsep
-device to the colorants of the ICC profile or to allow additional spot colorants
-in the document to be created as different separations. If restricted, the other
-spot colorants will go through the alternate tint transform and then be mapped to
-the color space defined by the N-CLR profile.
-</dl>
-
-<dl>
-<dt><code>-dRenderIntent=</code><em>intent</em>
+<dt><code>-dRenderIntent=</code><em>0/1/2/3</em>
<dd>Set the rendering intent that should be used with the
profile specified above by -sOutputICCProfile. The
-options for <em>intent</em> are
-0, 1, 2, and 3,
-which correspond to the ICC intents of Perceptual, Colorimetric,
+options 0, 1, 2, and 3 correspond to the ICC intents of Perceptual, Colorimetric,
Saturation, and Absolute Colorimetric.
-Also see <a href="#OverrideRI">OverrideRI</a>.
</dl>
<dl>
<dt><code>-dBlackPtComp=</code><em>0/1</em>
<dd>Specify if black point compensation should be used with the
profile specified above by -sOutputICCProfile.
-Also see <a href="#OverrideBP">OverrideBP </a>.
+</dl>
+
+<dl>
+<dt><code>-dKPreserve=</code><em>0/1/2</em>
+<dd>Specify if black preservation should be used when mapping
+from CMYK to CMYK. When using littleCMS as the CMM, the code 0
+corresponds to no preservation, 1 corresponds to the PRESERVE_K_ONLY approach
+described in the littleCMS documentation and 2 corresponds to the
+PRESERVE_K_PLANE approach. This is only valid when using littleCMS for
+color management.
</dl>
<dl>
@@ -2921,18 +2917,21 @@ colors for graphics.
</dl>
<dl>
-<dt><code>-dGraphicIntent=</code><em>intent</em>
-<dd>Set the rendering intent that should be used with the
-profile specified above by -sGraphicICCProfile. The
-options are the same as specified for -sRenderIntent.
-Also see <a href="#OverrideRI">OverrideRI</a>.
+<dt><code>-dGraphicIntent=</code><em>0/1/2/3</em>
+<dd>Set the rendering intent that should be used with graphic objects. The
+options are the same as specified for -dRenderIntent.
</dl>
<dl>
-<dt><code>-dGraphBlackPt=</code><em>0/1</em>
-<dd>Specify if black point compensation should be used with the
-profile specified above by -sGraphicICCProfile.
-Also see <a href="#OverrideBP">OverrideBP </a>.
+<dt><code>-dGraphicBlackPt=</code><em>0/1</em>
+<dd>Specify if black point compensation should be used for graphic objects.
+</dl>
+
+<dl>
+<dt><code>-dGraphicKPreserve=</code><em>0/1/2</em>
+<dd>Specify if black preservation should be used when mapping
+from CMYK to CMYK for graphic objects. The
+options are the same as specified for -dKPreserve.
</dl>
<dl>
@@ -2946,18 +2945,20 @@ pleasing images.
</dl>
<dl>
-<dt><code>-dImageIntent=</code><em>intent</em>
-<dd>Set the rendering intent that should be used with the
-profile specified above by -sImageICCProfile. The
-options are the same as specified for -sRenderIntent.
-Also see <a href="#OverrideRI">OverrideRI</a>.
+<dt><code>-dImageIntent=</code><em>0/1/2/3</em>
+<dd>Set the rendering intent that should be used for images.
</dl>
<dl>
<dt><code>-dImageBlackPt=</code><em>0/1</em>
-<dd>Specify if black point compensation should be used with the
-profile specified above by -sImageICCProfile.
-Also see <a href="#OverrideBP">OverrideBP </a>.
+<dd>Specify if black point compensation should be used with images.
+</dl>
+
+<dl>
+<dt><code>-dImageKPreserve=</code><em>0/1/2</em>
+<dd>Specify if black preservation should be used when mapping
+from CMYK to CMYK for image objects. The
+options are the same as specified for -dKPreserve.
</dl>
<dl>
@@ -2970,18 +2971,21 @@ as the profile. This can be used ensure K only text.
</dl>
<dl>
-<dt><code>-sTextIntent=</code><em>intent</em>
-<dd>Set the rendering intent that should be used with the
-profile specified above by -sTextICCProfile. The
-options are the same as specified for -sRenderIntent.
-Also see <a href="#OverrideRI">OverrideRI</a>.
+<dt><code>-dTextIntent=</code><em>0/1/2/3</em>
+<dd>Set the rendering intent that should be used text objects. The
+options are the same as specified for -dRenderIntent.
</dl>
<dl>
<dt><code>-dTextBlackPt=</code><em>0/1</em>
-<dd>Specify if black point compensation should be used with the
-profile specified above by -sTextICCProfile.
-Also see <a href="#OverrideBP">OverrideBP </a>.
+<dd>Specify if black point compensation should be used with text objects.
+</dl>
+
+<dl>
+<dt><code>-dTextKPreserve=</code><em>0/1/2</em>
+<dd>Specify if black preservation should be used when mapping
+from CMYK to CMYK for text objects. The
+options are the same as specified for -dKPreserve.
</dl>
<dl>
@@ -2997,28 +3001,6 @@ control in the specification of source colors see
</dl>
<dl>
-<dt><a name="OverrideRI"></a><code>-dOverrideRI</code>
-<dd>Override the rendering intent contained in the source
-document with the rendering intents specified by -dRenderIntent,
--dGraphicIntent, -dImageIntent, -dTextIntent. Note that
-unless -dOverrideRI is specified, the above rendering intent
-settings are essentially ignored. For detailed control over
-rendering intent with specific object types, see
-<a href="#SourceObjectICC">SourceObjectICC</a>.
-</dl>
-
-<dl>
-<dt><a name="OverrideBP"></a><code>-dOverrideBP</code>
-<dd>Override the black point compensation setting contained in the source
-document with the black point settings specified by -dBlackPtComp,
--dGraphBlackPt, -dImageBlackPt, -dTextBlackPt. Note that
-unless -dOverrideBP is specified, the above black point compensation
-settings are essentially ignored. For detailed control over
-black point compensation with specific object types, see
-<a href="#SourceObjectICC">SourceObjectICC</a>.
-</dl>
-
-<dl>
<dt><a name="SourceObjectICC"></a><code>-sSourceObjectICC=</code><em>filename</em>
<dd>
This option provides an extreme level of override control to
@@ -3026,14 +3008,17 @@ specify the source color spaces and rendering intents to use
with graphics, images and text for both RGB and CMYK source
objects. The specification is made through a file that contains
on a line a key name to specify the object type (e.g. Image_CMYK)
-followed by an ICC profile file name and a rendering intent
+followed by an ICC profile file name, a rendering intent
number (0 for perceptual, 1 for colorimetric, 2 for saturation,
-3 for absolute colorimetric). An example file is given in
+3 for absolute colorimetric) and information for black point compensation,
+black preservation, and source ICC override. It is also possible to turn
+off color management for certain object types, use device link profiles for
+object types and do custom color replacements. An example file is given in
./gs/toolbin/color/src_color/objsrc_profiles_example.txt.
Profiles to demonstrate this method of specification are also
included in this folder. Note that if objects are colorimetrically
-specified through this mechanism other operations like -sImageIntent,
--dOverrideICC, have no real affect. See further details in the document
+specified through this mechanism other operations like -dImageIntent,
+-dOverrideICC, have no affect. See further details in the document
<a href="GS9_Color_Management.pdf">GS9 Color Management</a>.
</dl>
@@ -3058,6 +3043,14 @@ are used to convert between RGB and CMYK with black generation and undercolor
removal mappings.
</dl>
+
+<dl>
+<dt><code>-dSimulateOverprint=</code><em>true/false</em>
+<dd>
+This option enables CMYK devices (e.g. tiff32nc) to provide an simulation of
+overprinting.
+</dl>
+
<dl>
<dt><code>-dUsePDFX3Profile=</code><em>int</em>
<dd>