<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jan 20, 2010, at 4:17 PM, James Cloos wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">"Bill" == Bill Spitzak &lt;<a href="mailto:spitzak@gmail.com">spitzak@gmail.com</a>&gt; writes:<br></blockquote></blockquote></blockquote></blockquote></blockquote><br>Bill&gt; I do not understand. What exactly do you think EVERY SINGLE PROGRAM IN <br>Bill&gt; THE WORLD does with those current CMYK "alternatives" when they draw <br>Bill&gt; them on the screen?<br><br>Bill&gt; I find it impossible to believe that any program does anything other <br>Bill&gt; than the simplistic conversion. Any "smarter" program will instead use <br>Bill&gt; the pantone color directly.<br><br>Look at the XPDF or poppler src. &nbsp;They follow adobe's lead in converting<br>DeviceCMYK to DeviceRGB (aka sRGB). &nbsp;The transform is straight forward,<br>not too complex, but is not at all a simple r=m-1 kind of transform.<br><br>Also, look for:<br><br>/usr/share/ghostscript/${VERSION}/Resource/ColorSpace/DefaultCMYK<br><br>and compare that against the TrivialCMYK in the same dir. &nbsp;That does the<br>same transform.<br></div></blockquote><div><br></div>Okay I did not have the right formula.</div><div><br></div><div>However this confirms my understanding that the conversion from "CMYK" to sRGB is fixed and has no "color management" controls. So my argument that no CMYK api is needed still holds: the calling program can do this conversion to get sRGB values to pass to Cairo, which can then do any color management it needs to do. The fact that a spot color was used does need to be sent but that requires fewer api modifications than also having non-sRGB color spaces.</div><div><br></div><div>Apparently the conversion is:</div><div><br></div><span class="Apple-style-span" style="font-family: Arial, Helvetica, 'Luxi Sans', sans-serif; font-size: 14px; white-space: pre; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">R = (1 - K)*(1 - C)
G = (1 - K)*(1 - M)
B = (1 - K)*(1 - Y)

</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">K = min{1 - R, 1 - G, 1 - B}
if(K == 1) {
    C = M = Y = 1
} else {
    C = (1 - R - K)/(1 - K)
    M = (1 - G - K)/(1 - K)
    Y = (1 - B - K)/(1 - K)
}
</div><div><br></div></span></body></html>