Как преобразовать цвета RGB в CMYK и обратно
Материал из DRKB
Следующие функции RGBtoCMYK() и CMYKtoRGB() демонстрируют, как преобразовать цвета между цветовыми пространствами RGB и CMYK.
Примечание: Между цветами RGB и CMY есть прямая связь. В CMY оттенки серого получаются при смешивании равного объема Cyan (голубых), Magenta (пурпурных), and Yellow (желтых) чернил. Черный цвет в CMY получается за счет уменьшения значений C, M, Y до минимума и подстановки чисто черного цвета, что позволяет получить более четкий цвет и экономить чернила. На случай высоких значений C, M, Y - есть функция ColorCorrectCMYK(), которая дает такой же цвет, но с меньшим C, M, Y и большим K.
Example:
procedure RGBtoCMYK(R, G, B: Byte; var C, M, Y, 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, M, Y, K: Byte; var R, G, 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, M, Y, 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;
Author: p0s0l
ID: 03680
ID: 04105
ID: 04106