[cairo] Spot colors (and CMYK)

Bill Spitzak spitzak at gmail.com
Thu Jan 14 17:13:20 PST 2010

James Cloos wrote:

> for cairo_t meaning one of DeviceRGB, sRGB or scRGB -- which one whould
> need to decided and documented.

In floating point sRGB and scRGB are identical. scRGB is just a larger 
than 0-1 range which floating point supports anyway.

You may be thinking of "linear" light levels rather than the gamma 
corrected levels sRGB define. In linear space adding two colors 
numerically is the same as adding two lights physically. I am not sure 
what to call this but scRGB is the wrong term. I use "linearRGB" but an 
awful lot of code uses the term "linear" for what you are calling Device 
space (in that the transformation to the device is the linear identity), 
this has led to a lot of confusion.

> There should be several well known values for cairo_color_space_t, such
> as sRGB, scRGB, CIELab, CIELuv, logLuv, DeviceRGB, DeviceGray, DeviceN,
> CIEBasedDEFG and the typical set of Yuv-style spaces.
> For ICC there would be a pointer to an ICC profile.
> The CIEBased spaces require a function specifying their conversion to
> some other space such as XYZ.  Cairo should support specifying that
> function either as a C function pointer or as a string of something
> such as cairoscript code.

Here is my proposal:

The main detail is that back ends do not need to understand much of 
anything and thus new color spaces can be added without any work.

A color, once a space is chosen, is defined by a fixed-size structure. 
This structure has the following form:

	struct cairo_color_t {
	  unsigned32 enumeration;
	  float sRGBA[4];
	  float other[n];

Where n depends on the enumeration and can range from 0 to any number. 
It is possible that data other than float may be placed in this memory.

Devices that do not understand the value in the enumeration can use the 
sRGBA values. This is actually device space though the sRGBA name is 
used because the numbers may be interpreted as exactly sRGB by other 
color spaces.

In more cases than you might think the other data can be zero. All 3-D 
spaces with a transformation to CIEXYZ can be transformed to non-clamped 
sRGB, the inverse transformation of the sRGBA values can be used to 
recover the values.

For spot colors the spot color is recovered by looking up the sRGB 
color. This assumes a 1:1 mapping between spot color and sRGB. Another 
channel is used to transfer this information.


More information about the cairo mailing list