Example: Generating CT, LW, and mask channels
This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP.
The RIP allows separations to be produced not just by color but also by the combination of color and graphic object attribute. By “separation”, we mean both true separations and the colors of band- and frame-interleaved composite output.
You can generate masks in Harlequin in three ways:
- An individual mask channel for each separation, using keys in the dictionary supplied to
addtoseparationorder
. - A mask for each separation, embedded within a contone raster channel. For information see ContoneMask (page device).
- A single mask for all colorants may be generated using The object map and ObjectTypeMap pagedevice key.
This section describes case 1.
This is done using keys in the dictionary supplied to addtoseparationorder
.
For example, in a normal separation, a graphic object would appear on the Cyan separation if it is colored cyan; otherwise in other separations it would knock out (unless overprinting is turned on).
We can extend this example to a situation where you wish to produce contone (CT) and linework (LW) as different ‘separations’ for each color, perhaps with a third, mask, separation to define how the CT and LW separations should combine in final output. In this case, it is useful to be able to direct particular kinds of object to the more appropriate separation. If you define a Cyan separation to be a CT separation then only CT-type objects which are cyan colored will be rendered into the separation, otherwise they will be knocked out or overprinted as requested.
For example, you can produce 12 separations:
Cc, Cl, Cm, Mc, Ml, Mm, Yc, Yl, Ym, Kc, Kl, Km
where (using X to represent each of C, M, Y, and K) Xc is a CT-only separation, Xl is a LW-only separation, and Xm is a mask separation that, for each pixel of each colorant (X), says whether it is a CT pixel or a LW pixel.
The separations can be interleaved in any desired order, with any interleaving style (and could even be imposed on the same raster). Additional separations for spot colors can be handled analogously.
Unless in frame-interleaved or separating mode, the RIP will need to allocate more memory per band to do this. The line height of the bands will automatically adjust smaller, unless you set the band size explicitly or increase the band memory allocation. In HMR, the band memory allocation is set in the Configure RIP Options dialog box, in the field labeled Band size for printing buffer
.
For a typical CMYK color setup, the RIP is set up for four colorants, so the first thing the plugin PostScript code has to do is to remove the colors set up by default. This removes the colors from being rendered, and also from being known to the interpreter. The second effect is not what we need, so we then have to re-introduce the color names to the RIP, using addtoseparationcolornames
.
Having re-introduced the color names, we use addtoseparationorder
to set the colors to render and to set their properties.
Inappropriate objects for a separation are rendered into the separation, but only as knockouts (and only if they do not overprint, either in a CT separation because /Picture
is set to /Ignore
, or in any separation because of ordinary PostScript-language overprinting operations).
Example of a suitable page feature:
% Example page feature for CT/LW separation
% Produces 12 separations for CT, LW, and mask.
% for convenience, put the colorant control operators in userdict
{
/removefromseparationcolornames
/addtoseparationcolornames
/addtoseparationorder
} {
userdict exch 1183615869 internaldict 1 index get put
} forall
% prepare an Install procedure
{
% 1. remove all existing colorants
currentpagedevice /Private get /SeparationColorNames get
/All removefromseparationcolornames
% 2. add them again so they are fully-fledged rendering colorants
% Introduce 12 new separations where for each colorant
% we get CT, then LW, then mask.
{
% start loop on all colorants
dup addtoseparationcolornames
% Create CT separations only
dup << /Picture /Render
/Default /Ignore
>> addtoseparationorder
% Create LW separations only, with knockout from Picture
dup << /Picture /Knockout
/Default /Render
>> addtoseparationorder
% Create mask separations based on picture content
<< /Picture /Mask
/Default /Knockout
>> addtoseparationorder
} forall
} bind
% Install the Install procedure in the pagedevice
<<
/Install [
currentpagedevice /Install get /exec load
6 -1 roll % bring our procedure to the top of stack
/exec load
] cvx bind
>> setpagedevice