Ink takes light away from a white sheet. A display adds light to a black panel. Moving a color between the two is a translation between opposite systems, so the RGB numbers on this page are a close reading rather than a match you should sign off on.
Each ink drives one channel
The formula behind the meters above is short, and the useful part is how the work splits up. Cyan sets red, magenta sets green, yellow sets blue. Black pulls all three down together.
| Channel | Driven by | Also affected by |
|---|---|---|
| Red | Cyan | Black |
| Green | Magenta | Black |
| Blue | Yellow | Black |
Raise cyan and only the red value drops. Raise black and all three drop at once. That pairing is why the sliders above are labelled with the channel they feed, and it makes correcting a color by hand quicker: a result too red needs more cyan, not a rebuild of the whole mix.
Two ink builds, one RGB result
Set the sliders to 0, 0, 0, 50 and you get rgb(128, 128, 128). Set them to 50, 50, 50, 0 and you get rgb(128, 128, 128) again. The conversion is many to one, because black ink and an equal mix of the other three subtract the same amount of light in the maths.
On a press those two builds behave nothing alike. The first lays down a single grey ink. The second stacks three inks that have to register perfectly, drifts warm or cool as the run continues, and soaks the sheet with three times the ink. A screen sees no difference at all.
The Same color, different ink panel above the presets shows the alternate build for whatever you have loaded. It is there because the conversion hides a decision the print side still has to make.
Round trips do not come back clean. Feed the RGB output into the RGB to CMYK converter and you rarely get your original percentages. The reverse formula pulls out as much black as it possibly can, so 60, 40, 40, 100 comes back as flat black. Keep the original build in your file, not the round tripped one.
Where these numbers get pasted
- CSS and design tools take the 0 to 255 form. Figma, Sketch and the browser all read
rgb(75, 188, 235)the same way. - Android and Compose want the hex form with an alpha byte in front, so prefix the copied hex with FF for a solid color.
- Shaders, Unity and SwiftUI take the 0 to 1 floats. Watch the color space setting there. Several render pipelines read those floats as linear light, and the same numbers come out brighter than the swatch on this page. Convert to linear before pasting when the target expects it.
What the conversion misses
No ICC profile runs here. A real print workflow resolves CMYK through a profile such as Coated FOGRA39 or US Web Coated SWOP, which knows the ink set, the paper and how far dots spread once wet. Photoshop returns slightly different numbers than this page for that reason, and for brand critical color its number is the one to use.
Saturated ink is where the gap widens. 100% process cyan converts to rgb(0, 255, 255), the brightest cyan sRGB holds and something no ink on paper reaches. Pure yellow gives rgb(255, 255, 0) for the same reason. Dark and muted builds, the navies and warm greys and deep greens, land close enough to work from. Treat the bright end as a direction to adjust by eye.
Four ink numbers in, three channel values out, with the arithmetic shown so you know which one to change next.
