[Openicc] Introduction / Gutenprint
Robert L Krawitz
rlk at alum.mit.edu
Mon Apr 11 05:49:52 EST 2005
Date: Sun, 10 Apr 2005 16:07:24 +0200
From: Gerhard Fuernkranz <nospam456 at gmx.de>
Robert L Krawitz schrieb:
>It sounds like what you're really suggesting here is that the driver
>provide good linearized output, and ICC profiles or whatnot be applied
>in Ghostscript. That's fine, but if Ghostscript is delivering 8-bit
>data to the driver, it means that a fair bit of information is getting
>lost because the profile won't be a 1-1 mapping. If Ghostscript
>outputs 16-bit data that issue goes away.
Actually I'm not really suggesting anything, because I don't know a
satisfactory solution.
On the one hand, I'm not fully satisfied with the quality of
ghostscript't color rendering, and on the other hand, with
ghostscript as is, I see no way to do it externally in the driver
(like Gutenprint does for halftoning), without breaking PS L3
support for CIE-based color spaces in PS documents (I'd hope, my
understanding were wrong).
I'm no sure, if gs output to the driver is really limited to 8bpp
(is it?), but 8bpp is indeed a design limitation for the
RenderTable in color rendering dictionaries. There may exists other
RIPs which use an ICC profile instead of the CRD, but ghostscript
as is, seems to honor strictly the PLRM regarding this issue, and
requires a _CRD_ for color rendering (not an ICC profile).
Ghostscript does appear to offer, at least in theory, a 16-bit data
path. How to actually use it is another matter.
If the device color space is well linearized, I'm not sure, if the
8-bit RenderTable is really an inacceptable limitation, since only
the 3D grid points are quantized to 8-bit, but the interpolation
between the grid points can of course be done with arbitrary
precision, which should still permit smooth color gradients (if it
is implemented carefully).
I think it would depend upon how dense the grid points are. If you're
using a low resolution grid like 33x33x33 (which I believe I've read
is sometimes used), it's probably not all that big of a deal, because
you're not going to be all that far off relative to the low precision
of the grid. If you were to use a higher resolution grid, I suspect
there would be a fair bit of roundoff error at certain points
>To summarize what I think I'm hearing:
>
>1) Linearization should be performed in the driver.
IMO also the generation of Cyan/LightCyan, Magenta/LightMagenta
separations, since often simply CMYK profiles are used for CcMmYK
printers, in this case the driver should accept CMYK input for a
CcMmYK printer. If additionally e.g. orange and green colorants
come into the play, a multicolor profile is likely unavoidable to
utilize the full color gamut optimally. But of course, for CcMmYK,
a multicolor profile could be used as well.
OK, that makes sense too. Gutenprint performs channel splitting (my
name for cyan/light cyan) after linearization. My own experiments
suggest that this needs to be performed with knowledge of all channels
rather than as a pure linear operation.
Btw, does the IJS interface currently support drivers with a
DeviceN (i.e. multicolor) ProcessColorModel?
Looking at the IJS source (gdevijs.c) in GNU Ghostscript 8.1, it
doesn't -- only DeviceGray, DeviceRGB, and DeviceCMYK.
--
Robert Krawitz <rlk at alum.mit.edu>
Tall Clubs International -- http://www.tall.org/ or 1-888-IM-TALL-2
Member of the League for Programming Freedom -- mail lpf at uunet.uu.net
Project lead for Gimp Print -- http://gimp-print.sourceforge.net
"Linux doesn't dictate how I work, I dictate how Linux works."
--Eric Crampton
More information about the openicc
mailing list