Как преобразовать цвета 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