Как преобразовать цвета RGB в CMYK и обратно.
Компилятор: Delphi
Ниже представлены две функции 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;
