diff options
author | Michael Vrhel <michael.vrhel@artifex.com> | 2012-10-25 16:43:37 -0700 |
---|---|---|
committer | Michael Vrhel <michael.vrhel@artifex.com> | 2012-10-25 20:17:26 -0700 |
commit | f4b2deea2aa129048014771c19ef9fb3c317de7e (patch) | |
tree | d81d7748e28add5de5072eb737fcb447e323cc67 | |
parent | 9c3de1fb29628f83ae7d48238e0dd0f3f35ecda1 (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.h | 2 | ||||
-rw-r--r-- | gs/base/gsdparam.c | 72 | ||||
-rw-r--r-- | gs/base/gsicc_cache.c | 9 | ||||
-rw-r--r-- | gs/base/gsicc_manage.c | 25 | ||||
-rw-r--r-- | gs/base/gsicc_manage.h | 3 | ||||
-rw-r--r-- | gs/doc/Use.htm | 201 |
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> |