Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2012, 14:19   #1
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию RGB в CMYK и CMYK в RGB могут конвертироваться без потери качества?

Решил протестить, для интереса. Запустил такую консольную программу:

Код:
program ColorWriter;

{$APPTYPE CONSOLE}

uses
   SysUtils;

procedure RGBtoCMYK(R: smallint; G: smallint; B: smallint;
   var C: smallint; var M: smallint; var Y: smallint; var K: smallint);
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: smallint; M: smallint; Y: smallint; K: smallint;
   var R: smallint; var G: smallint; var B: smallint);
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;

var
   r, g, b: smallint;
   r2, g2, b2: smallint;
   c, m, y, k: smallint;
   f: textfile;
begin
  { TODO -oUser -cConsole Main : Insert code here }
   Assignfile(f, 'D:\123.txt');
   Rewrite(f);
   for r:=0 to 255 do
      for g:=0 to 255 do
         for b:=0 to 255 do
         begin
            RGBtoCMYK(r, g, b, c, m, y, k);
            CMYKtoRGB(c, m, y, k, r2, g2, b2);
            if (r<>r2) OR (g<>g2) OR (b<>b2) then
               Writeln(f,'r=' ,r, ' g=' ,g, ' b=' ,b,
                         'r2=',r2,' g2=',g2,' b2=',b2);
         end;
   Closefile(f);
end.
И удивился: размер файла = 0 байт. Строка Writeln не выполняется.
Сделал специально ошибку так:
Код:
 if (r<>g2) OR (g<>g2) OR (b<>b2) then
и размер файла побежал ввысь. Исправил ошибку (на r<>r2) и размер файла - 0?

Я где здесь намутил или RGB и CMYK действительно конвертируются без потерь?
hon вне форума Ответить с цитированием
Старый 12.08.2012, 17:23   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

(не спец в RGB/CMYK, но...)

Есть мнение, что у тебя ошибка в рассуждениях.

Пример: всякое натуральное число является вещественным. Но не всякое вещественное число является натуральным.


(левый рисунок должен быть смещён наверх, чтобы пустой квадрат был бы последним, снизу)

Вот одно и то же изображение, по разному представленное в CMYK (справа - увеличина чёрная компонента, чтобы экономить цветную краску). В RGB оба эти изображения будут представлены одинаково. Т.е. два CMYK - один RGB.

Когда ты конвертируешь RGB в CMYK - ты получаешь какой-то CMYK из некоторых возможных. Конвертируешь обратно - получаешь тот же RGB. Но из этого никак не следует эквивалентность двух моделей.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 12.08.2012 в 17:25.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2012, 18:07   #3
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
(не спец в RGB/CMYK, но...)

Есть мнение, что у тебя ошибка в рассуждениях.

Пример: всякое натуральное число является вещественным. Но не всякое вещественное число является натуральным.


(левый рисунок должен быть смещён наверх, чтобы пустой квадрат был бы последним, снизу)

Вот одно и то же изображение, по разному представленное в CMYK (справа - увеличина чёрная компонента, чтобы экономить цветную краску). В RGB оба эти изображения будут представлены одинаково. Т.е. два CMYK - один RGB.

Когда ты конвертируешь RGB в CMYK - ты получаешь какой-то CMYK из некоторых возможных. Конвертируешь обратно - получаешь тот же RGB. Но из этого никак не следует эквивалентность двух моделей.
Я получай не CMY (левое), а CMYK (правое).
Как тогда считать это?

Код:
Никак. У CMYK меньше цветовой охват. Плюс потери при преобразовании
http://www.photoshop-master.ru/forum...p/topic/20799/
hon вне форума Ответить с цитированием
Старый 12.08.2012, 18:14   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Лично я пас, ибо
Цитата:
не спец в RGB/CMYK
Почему бы не задать этот вопрос в подходящем разделе, где есть люди, способные на него ответить? Причём тут Delphi?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 19.08.2012, 14:33   #5
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Почему бы не задать этот вопрос в подходящем разделе, где есть люди, способные на него ответить? Причём тут Delphi?
Найдите такой раздел тогда.
hon вне форума Ответить с цитированием
Старый 19.08.2012, 14:41   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Мультімедіа, не?
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
rgb(***,***,***) Fisherman86 Общие вопросы Delphi 3 31.03.2012 11:40
Вырезать картинку(без потери качества) с исходным разрешением Vivaldi7 Мультимедиа в Delphi 2 14.10.2011 18:35
Преобразование из RGB в CMYK на С# Yura_KoT Помощь студентам 2 31.03.2011 23:36
RGB Flow Kepler Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 09.03.2011 00:58
Перевод из RGB-CMYK на с++ Sined121 Помощь студентам 3 06.11.2010 18:22