Created Date: 16 Mar, 2022 15:03
Last Modifed Date: 16 Mar, 2022 15:03

This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP


CMM custom color spaces are used to perform non-standard color transforms, for example; it is common for office printers to convert RGB to the device CMYK using proprietary methods for UCR/BG, gamma correction and ink limiting. While it may be possible to perform some of these steps with standard color transforms, it may be preferable for performance and/or memory usage to perform them in C code. In addition, the C code may use hardware assistance.

CMM custom color spaces are managed via the Alternate CMM API. The API is documented elsewhere (see the Harlequin API Reference Manual , which describes how to write a C module to make CMM custom color spaces available to the RIP). Briefly, an alternate CMM module may contain any number of CMM custom color spaces, each of which converts color from a number of input-to-output components. The rest of this section documents how to configure color to make use of them.

A CMM custom color space is presented as a PostScript language color space array:

[ /CMM <name> <input-color-space> <output-color-space> ]

where:

<name> is a PostScript language name or string that matches the name of the CMM custom color space in the C code.

<input-color-space> is a standard PostScript language color space. The number of components in this space must be appropriate for its location in the configuration, and it must be the same as the C code was written for. It must be a device space of /DeviceCMYK, /DeviceRGB, /DeviceGray, /Separation, or /DeviceN.

<output-color-space> is a standard PostScript language color space. The number of components in this space must be appropriate for either the output device or the next profile in the configuration, and it must be the same as the C code was written for. It must be a device space of /DeviceCMYK,

/DeviceRGB, /DeviceGray, /Separation, or /DeviceN.

If the input and/or output color space is /DeviceN, only the colorant list is relevant. The alternate space and tint transform are required to have the correct syntax, but are otherwise ignored.

CMM custom color spaces may be used with:

  • /DeviceCMYK, /DeviceRGB, and /DeviceGray keys of setinterceptcolorspace, where the input color space of the CMM custom color space should match the key used. (The /BlendCMYK,

/BlendRGB and /BlendGray keys are explicitly not allowed to use CMM custom color spaces.)

Only the final color conversion to the output device will use the CMM custom color space in jobs containing transparency. Any other color conversions required as part of compositing will use the corresponding /BlendCMYK, /BlendRGB, or /BlendGray profile. This is because these color conversions require an invertible ICC profile, see DeviceLink ICC profiles and Blend space color management .

  • /InputColorSpace key of /NextDevice dictionary in setreproduction, which may be used in emulation, ink limiting, and similar workflows. The input color space of the CMM custom color space should accept the output colorants from the previous profile in the configuration.

An alternate CMM is made available by calling setalternatecmm, for example:

(alternate-cmm-name) setalternatecmm


Note: The Alternate CMM API contains functionality for both ICC CMMs and CMM custom color spaces. If an Alternate CMM is only implementing CMM custom color spaces, the ICC specific parts of the API may be ignored except to set the support_*_profiles flags in the API to false, and either set open_profile to NULL or give a trivial implementation for it. For more information see the cmm_example in the cmmeg directory of the SDK (see the Harlequin Core Developer’s Guide ).