Как преобразовать цвета RGB в CMYK и обратно?
01.01.2007
p0s0l
The following functions RGBTOCMYK() and CMYKTORGB() demonstrate how to convert between RGB and CMYK color spaces.
Note: There is a direct relationship between RGB colors and CMY colors. In a CMY color, black tones are achieved by printing equal amounts of Cyan, Magenta, and Yellow ink. The black component in a CMY color is achieved by reducing the CMY components by the minimum of (C, M, and Y) and substituting pure black in its place producing a sharper print and using less ink. Since it is possible for a user to boost the C,M and Y components where boosting the black component would have been preferable, a ColorCorrectCMYK() function is provided to achieve the same color by reducing the C, M and Y components, and boosting the K component.
Example:
procedure RGBTOCMYK(R : byte;
G : byte;
B : byte;
var C : byte;
var M : byte;
var Y : byte;
var K : byte);
begin
C := 255 - R;
M := 255 - G;
Y := 255 - B;
if C < M then
K := C else
K := M;
if Y < K then
K := Y;
if k > 0 then begin
c := c - k;
m := m - k;
y := y - k;
end;
end;
procedure CMYKTORGB(C : byte;
M: byte;
Y : byte;
K : byte;
var R : byte;
var G : byte;
var B : byte);
begin
if (Integer(C) + Integer(K)) < 255 then
R := 255 - (C + K) else
R := 0;
if (Integer(M) + Integer(K)) < 255 then
G := 255 - (M + K) else
G := 0;
if (Integer(Y) + Integer(K)) < 255 then
B := 255 - (Y + K) else
B := 0;
end;
procedure ColorCorrectCMYK(var C : byte;
var M : byte;
var Y : byte;
var K : byte);
var
MinColor : byte;
begin
if C < M then
MinColor := C else
MinColor := M;
if Y < MinColor then
MinColor := Y;
if MinColor + K > 255 then
MinColor := 255 - K;
C := C - MinColor;
M := M - MinColor;
Y := Y - MinColor;
K := K + MinColor;
end;

