Delphi World - Как преобразовать цвета RGB в CMYK и обратно
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как преобразовать цвета 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;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования