Ниже представлены две функции 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 thenbegin
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);
beginif (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;
beginif 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;
Программа конвертации цветов!
Код написан на языке Pascal и состоит из трех процедур: RGBTOCMYK, CMYKTORGB и ColorCorrectCMYK. Эти процедуры позволяют конвертировать между моделями RGB (Красный, Зеленый, Синий) и CMYK (Сиан, Магента, Желтый, Черный).
Вот краткое описание каждой процедуры:
RGBTOCMYK:
Принимает три значения RGB (R, G, B) в качестве входных данных.
Вычисляет соответствующие значения CMYK, вычитывая значения RGB из 255 (максимального значения).
Если рассчитанное значение K (Черный) больше 0, то корректирует значения C, M и Y, чтобы результат не был слишком темным.
CMYKTORGB:
Принимает четыре значения CMYK (C, M, Y, K) в качестве входных данных.
Вычисляет соответствующие значения RGB, вычитая значения CMYK из 255 (максимального значения).
Если рассчитанное значение R, G или B будет больше 255, то устанавливает значение в 0 (черный).
ColorCorrectCMYK:
Принимает четыре значения CMYK (C, M, Y, K) в качестве входных данных.
Вычисляет минимальное значение цвета (MinColor), найдя наименьшее из значений C, M и Y.
Корректирует значения C, M и Y, чтобы они не были слишком темными, оставляя значение K неизменным.
Главная форма имеет обработчик события клика кнопки, который демонстрирует, как эти процедуры можно использовать. Он:
Конвертирует цвет RGB (R=151, G=81, B=55) в CMYK.
Выводит полученные значения CMYK.
Конвертирует значения CMYK обратно в RGB.
Выводит полученные значения RGB.
Вызывает ColorCorrectCMYK, чтобы корректировать значения CMYK для лучшего контраста.
Обратите внимание, что это реализация assumes specific color model и может не работать правильно с всеми цветами или устройствами. Кроме того, процедура ColorCorrectCMYK является простым приближением и может не давать оптимальных результатов в всех случаях.
Статья рассказывает о преобразовании цветов RGB в CMYK и обратно с помощью программных функций RGBTOCMYK, CMYKTORGB и ColorCorrectCMYK.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.