Как преобразовать цвета RGB в CMYK и обратно
Ниже представлены две функции RGBTOCMYK() и CMYKTORGB(), которые позволяют
преобразовывать набор цветов RGB и CMYK.
Замечание: В цвете CMY чёрные тона достигаются путём одинаковых значений
Циана, Магенты и Жёлтого чернил. Чёрные чернила используются только при чисто
чёрных точках, для повышения контрастности и экономии цветных чернил. Как раз
для этого предназначена третья функция ColorCorrectCMYK().
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;
procedure TForm1.Button1Click(Sender: TObject);
var
R: byte;
G: byte;
B: byte;
C: byte;
M: byte;
Y: byte;
K: byte;
begin
R := 151;
G := 81;
B := 55;
Memo1.Lines.Add('R = ' + IntToStr(R));
Memo1.Lines.Add('G = ' + IntToStr(G));
Memo1.Lines.Add('B = ' + IntToStr(B));
Memo1.Lines.Add('-------------------');
RGBTOCMYK(R, G, B, C, M, Y, K);
Memo1.Lines.Add('C = ' + IntToStr(C));
Memo1.Lines.Add('M = ' + IntToStr(M));
Memo1.Lines.Add('Y = ' + IntToStr(Y));
Memo1.Lines.Add('K = ' + IntToStr(K));
Memo1.Lines.Add('-------------------');
CMYKTORGB(C, M, Y, K, R, G, B);
Memo1.Lines.Add('R = ' + IntToStr(R));
Memo1.Lines.Add('G = ' + IntToStr(G));
Memo1.Lines.Add('B = ' + IntToStr(B));
Memo1.Lines.Add('-------------------');
RGBTOCMYK(R, G, B, C, M, Y, K);
c := c + 2;
m := m + 2;
y := y + 2;
ColorCorrectCMYK(C, M, Y, K);
Memo1.Lines.Add('C = ' + IntToStr(C));
Memo1.Lines.Add('M = ' + IntToStr(M));
Memo1.Lines.Add('Y = ' + IntToStr(Y));
Memo1.Lines.Add('K = ' + IntToStr(K));
end;
|
|