static void gray_cs_to_spotn_cm(gx_device * dev, frac gray, frac out[]) { /* TO_DO_DEVICEN This routine needs to include the effects of the SeparationOrder array */ cmyk_cs_to_spotn_cm(dev, 0, 0, 0, frac_1 - gray, out); }
static void rgb_cs_to_spotn_cm(gx_device * dev, const gs_imager_state *pis, frac r, frac g, frac b, frac out[]) { /* TO_DO_DEVICEN This routine needs to include the effects of the SeparationOrder array */ xcf_device *xdev = (xcf_device *)dev; int n = xdev->separation_names.num_names; icmLuBase *luo = xdev->lu_rgb; int i; if (luo != NULL) { double in[3]; double tmp[MAX_CHAN]; int outn = xdev->lu_rgb_outn; in[0] = frac2float(r); in[1] = frac2float(g); in[2] = frac2float(b); luo->lookup(luo, tmp, in); for (i = 0; i < outn; i++) out[i] = float2frac(tmp[i]); for (; i < n + 4; i++) out[i] = 0; } else { frac cmyk[4]; color_rgb_to_cmyk(r, g, b, pis, cmyk); cmyk_cs_to_spotn_cm(dev, cmyk[0], cmyk[1], cmyk[2], cmyk[3], out); } }
static void rgb_cs_to_spotn_cm(gx_device * dev, const gs_imager_state *pis, frac r, frac g, frac b, frac out[]) { /* TO_DO_DEVICEN This routine needs to include the effects of the SeparationOrder array */ xcf_device *xdev = (xcf_device *)dev; int n = xdev->separation_names.num_names; gcmmhlink_t link = xdev->rgb_icc_link; int i; if (link != NULL) { unsigned short in[3]; unsigned short tmp[MAX_CHAN]; int outn = xdev->rgb_profile->num_comps_out; in[0] = frac2ushort(r); in[1] = frac2ushort(g); in[2] = frac2ushort(b); gscms_transform_color(dev, link, &(in[0]), &(tmp[0]), 2); for (i = 0; i < outn; i++) out[i] = ushort2frac(tmp[i]); for (; i < n + 4; i++) out[i] = 0; } else { frac cmyk[4]; color_rgb_to_cmyk(r, g, b, pis, cmyk, dev->memory); cmyk_cs_to_spotn_cm(dev, cmyk[0], cmyk[1], cmyk[2], cmyk[3], out); } }