[cairo] Subtractive API, part 0

Chris Murphy lists at colorremedies.com
Sat Jan 30 12:07:37 PST 2010

On Jan 29, 2010, at 4:32 PM, ecir hana wrote:

> I repeatedly said this proposal is not about displaying colors and yet
> you always talk about color management.

I'm not intentionally being dense here, but whenever color comes up in any context I look at how it is going to be used. And the way color usage is being described here, sounds like what has been done in the past and made people miserable. Did they get work done? Yes. Did the lack of even basic device independent color handling have unintended, but entirely predictable, consequences? Yes.

> The proposal does not care
> whether cmyk(0, 1, 2, 3) is rgb(4, 5, 6) or rgb(7, 8, 9). It is about
> saying "cmyk", about the ability to define any cmyk(w, x, y, z) in
> Cairo.

I probably do not understand the proposal well enough, or the domain of Cairo, vs the application, vs. the window server, vs a printing pipeline.

You want Cairo to simply understand four channel color spaces? That's it? They're entirely arbitrary four channels, and there is no need for Cairo to pass on any additional information so that four channel color can be displayed (RGB) or printed (mixed RGB and CMYK)? So Cairo manipulates this four color space somehow and then returns the result back to the application, which is then responsible for a CMYK->RGB conversion prior to submitting the result to the window server for display?

I'm not understanding the flow of CMYK image/vector data from the application to Cairo; from Cairo to the application; and to/from any other agents such as a window server or a printing pipeline.


> Apparently, you have two problems with the above: how do you display
> untagged cmyk and how do you print untagged cmyk. As I said, those are
> questions not central to my proposal but I will address them anyway,
> for the sake of discussion. For display, use that simple formula I
> wrote above. Is it perfect? Hardly and I never claimed that. For my
> needs, it is sufficient as I understand that what's on the screen is
> wrong anyway. If you need more precise way of converting to RGB you
> are very welcomed to come up with a more suitable fallback. Again, I
> don't care whether you use ICC or CIE LAB or sRGB - my question is,
> certainly there is some kind of fallback which would make you happy,
> but how to tell Cairo about it? If you were in need of defining cmyk
> in Cairo how would you write it down? Would "set-cmyk-for-this-icc" do
> it?

You might be able to get away with merely passing on ICC profiles as metadata, without requiring any capability of color space conversions. It's undesirable to normalize anyway, prior to understanding the actual destination color space. So I wouldn't recommend that an application be required to normalize to displayRGB, it would be better for the application to tag its data with some source space (whatever it is) and have the window server capable of normalizing to displayRGB. And then the printing system can normalize to printRGB (whatever that is). Otherwise you end up with applications that have no means of inheriting even basic color consistency, it would have to be implemented in each application independently. I think that's a waste of developer resources.

> For printing, even with untagged cmyk, nothing stops the application
> or CMS to supply correct cmyk values to Cairo. Those values would get
> baked-in into the pdf, making them possibly unusable on another device
> - so what? Do you print a poster on two different printers?

Absolutely, all the time. Movie posters will be printed on dozens of printers, perhaps in multiple geographic locations.

Untagged CMYK in a PDF is OK, but I would then require that an outputintent is set for the PDF, so that we know what the intended CMYK output condition is, in case the PDF needs to be repurposed.

> Then there is my favorite topic, spot colors. Saying there is no
> magenta is just utterly wrong. You can buy magenta here:
> http://www.printinginksupplies.com/NOVASET-PROCESS-MAGENTA_p_76.html

It's kindof a ridiculous example because I can point to another process magenta and it will be a completely different color than the one you found. Magenta is not a color. It's a range of colors. It's a vague term.

If I take that magenta you found, and print 100% magenta on three different kinds of media, you will have three completely different magentas. Not subtle differences either. Radical differences, depending on the media selected.

Cyan for a printing press is a completely different color depending on region, even depending on printing company. Cyan for inkjet printers is closer to blue than cyan, but it's called cyan. There's no correlation between the CMYK colorants typically used on press, compared to those used in inkjets. Not even close to the same thing. Completely different hue, completely different chroma, completely different lightness.

> I claim that if you need to print a certain color the best possible
> way is to use a spot color. I hope we agree that if the color is
> present on the output device, there is no problem whatsoever and we
> both get the same result if we use the same spot color, right?

Maybe, maybe not. It depends.

1. Do we have the same output device with the same output behavior (not guaranteed)?
2. Do we have the exact same spot color colorant (this is already a given)?
3. Are we using the same media?
4. Are we using the same driver/RIP software and versions?

> Now,
> what happens if the device does not support the spot? Again, I don't
> really care. There is no substitute for metallic color or matte
> varnish, anyway.

There are better and worse ways to approximate these. It's a continuum.

> Take gold, for example. To supply some random yellow
> in CMYK for the fallback is perfectly ok, because metallic colors look
> differently at different view angles. You certainly don't need CIE to
> get higher precision because it is totally wrong anyway.

Ask a designer how they want the simulation to look for such colors, whether on-screen or on a proof. The will universally prefer something closer rather than something arbitrary.

> But if you
> insist, your application could ask you what kind of paper, printer,
> ... you use and supply these CMYK fallback values to Cairo.

Why should an application have to do this? It could tag the color with a CIE value and then downstream it's approximated as close as possible if the original colorant isn't available. Why ask every application to reinvent the wheel?

> I'm
> interested in how the API function should be written, what kind of
> data structures are there needed and what does it mean for the current
> Cairo surfaces.
> In other words, say you want to print "ultramarine" color. How do you
> tell Cairo? How do you supply its tints values?

Understood. That's a different conversation entirely, than what I'm talking about, and I am unqualified to contribute to that aspect of the proposal.

>> Adobe InDesign optionally will use Lab values for spots, and thus show them correctly
>> on-screen at 100% when printed on media white only. When you start to print tints, or
>> interact the inks, all bets are off. Neither Adobe nor Pantone supply ink opacity, and even
>> if it were supplied there isn't an algorithm to effectively use this to improve on-screen
>> display or printed simulations. So the net result of this is that you have to outsource these
>> kinds of proofs, and typically you get overlays, and spend a lot of money on experienced
>> prepress handling in order to get things to print correctly.
> Exactly! Exactly!!!
> This is single most important point I try to make from the beginning.
> "all bets are off" - this whole CMS is just so complex that no one
> gets it right.

It's a continuum. It's not fair to say no one gets it right. I don't now perfection is an attainable goal anyway so I'm casting it right out from the get go. But given what I say in the paragraph above, there is a product that gets it very close to correct, and that's Serendipity Blackmagic. It does take opacity, dot gain, and print sequence into account for soft proofing and hard proofing.

It can be done, it's not exactly rocket science it's just a matter of how far do you want this stuff to go. I think it's fair to tag the spot colors with a CIE value so it has at least a chance of appearing halfway decent as a solid (100%) value, instead of some candy ass color which is what we've dealt with for years and has hurt people. Treating spots with LAB equivalents has proven to be very useful.

Chris Murphy
Color Remedies (TM)
New York, NY
Co-author "Real World Color Management, 2nd Ed"

More information about the cairo mailing list