Не могу разобраться с JPG

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Не могу разобраться с JPG

Сообщение v00d00911 » 12.01.2015 01:04:10

Mirage Не получается ничего. Ни работать ни сохранять. Не пойму как это реализовать :evil: :evil: :evil:
v00d00911
новенький
 
Сообщения: 12
Зарегистрирован: 10.01.2015 20:35:11

Re: Не могу разобраться с JPG

Сообщение Mirage » 12.01.2015 01:49:38

Значит не конвертятся данные.
Тогда вариант с HSV остается.:)
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Не могу разобраться с JPG

Сообщение v00d00911 » 12.01.2015 12:12:33

Mirage Напиши хотя бы по 1-му цвету как бы ты реализовал этот код. Если конечно можешь. Т.е. если не затруднит.
v00d00911
новенький
 
Сообщения: 12
Зарегистрирован: 10.01.2015 20:35:11

Re: Не могу разобраться с JPG

Сообщение Alex2013 » 12.01.2015 15:24:21

"Как однажды Жак звонарь городской сломал фонарь "
Брр в чём проблема ?

http://habrahabr.ru/post/181580/
Не кури бамбук ! :)
ЗЫ
Или совсем уж просто
Код: Выделить всё
begin
  max_value:=max_of(R,G,B);
  min_value:=min_of(R,G,B);
  diff:=max_value-min_value;
  V:=max_value;
  if max_value<>0 then s:=(diff / max_value) else S:=0;
  if S=0  then h:=undefined
          else 
      begin
                 r:=(max_value-R) / diff;
                 g:=(max_value-G) / diff;
                 b:=(max_value-B) / diff;
                 if R=max_value
                    then H:=b_dist-g_dist
                    else if G=Max_value
                            then H:=2+r_dist-b_dist
                            else if B=max_value
                                    then H:=4+g_dist-r_dist;
                 H:=H*60;
                 if H<0 then H:=H+360;
               end;
end;

Сам цвет что-то вроде
Цвет = H / (360/7)
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44

Re: Не могу разобраться с JPG

Сообщение v00d00911 » 12.01.2015 16:41:04

Alex2013 писал(а):"Как однажды Жак звонарь городской сломал фонарь "
Брр в чём проблема ?

http://habrahabr.ru/post/181580/
Не кури бамбук ! :)
ЗЫ
Или совсем уж просто
Код: Выделить всё
begin
  max_value:=max_of(R,G,B);
  min_value:=min_of(R,G,B);
  diff:=max_value-min_value;
  V:=max_value;
  if max_value<>0 then s:=(diff / max_value) else S:=0;
  if S=0  then h:=undefined
          else 
      begin
                 r:=(max_value-R) / diff;
                 g:=(max_value-G) / diff;
                 b:=(max_value-B) / diff;
                 if R=max_value
                    then H:=b_dist-g_dist
                    else if G=Max_value
                            then H:=2+r_dist-b_dist
                            else if B=max_value
                                    then H:=4+g_dist-r_dist;
                 H:=H*60;
                 if H<0 then H:=H+360;
               end;
end;

Сам цвет что-то вроде
Цвет = H / (360/7)

Можно прокоментировать код. А то что-то не понятно что и к чему.
v00d00911
новенький
 
Сообщения: 12
Зарегистрирован: 10.01.2015 20:35:11

Re: Не могу разобраться с JPG

Сообщение vitaly_l » 13.01.2015 03:16:55

Пример с bmp, а перегонять в jpg и обратно см. в google.
Нужно подкорректировать цвета вот в этой части:
Код: Выделить всё
         if (H >= 0)  and (H <=  17) then begin p^[x].r := 255; p^[x].g := 0;   p^[x].b := 0;   inc(iRed); end
            else if (H > 17)  and (H <=  50) then begin p^[x].r := 255; p^[x].g := 128; p^[x].b := 0;   inc(iOrange); end
            else if (H > 50)  and (H <=  83) then begin p^[x].r := 255; p^[x].g := 255; p^[x].b := 0;   inc(iYellow); end
            else if (H > 83)  and (H <= 116) then begin p^[x].r := 0;   p^[x].g := 255; p^[x].b := 0;   inc(iGreeen); end
            else if (H > 116) and (H <= 149) then begin p^[x].r := 0;   p^[x].g := 255; p^[x].b := 255; inc(iLightBlue); end
            else if (H > 149) and (H <= 185) then begin p^[x].r := 0;   p^[x].g := 0;   p^[x].b := 255; inc(iBlue); end
            else if (H > 185) and (H <= 220) then begin p^[x].r := 128; p^[x].g := 0;   p^[x].b := 255; inc(iPurple); end
            else if (H > 220) and (H <= 240) then begin p^[x].r := 255; p^[x].g := 0;   p^[x].b := 0;   inc(iRed); end 

и тогда цвета будут совпадать с картинкой и подсчитываться правильно.
А сейчас они разделены на примерно равные отрезки... 360 на 7...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Не могу разобраться с JPG

Сообщение Alex2013 » 15.01.2015 15:38:42


Можно прокоментировать код. А то что-то не понятно что и к чему.

Пожалуйста... :)
Или совсем уж просто
begin
max_value:=max_of(R,G,B); // Максимум из трех чисел
min_value:=min_of(R,G,B); .// Минимум из трех чисел
diff:=max_value-min_value;
V:=max_value; // Это и есть V в НSV
if max_value<>0 then s:=(diff / max_value) else S:=0;
// Это и есть S в НSV
if S=0 then h:=undefined
else
begin
r_dist:=(max_value-R) / diff;
g_dist:=(max_value-G) / diff;
b_dist:=(max_value-B) / diff;
if R=max_value
then H:=b_dist-g_dist
else if G=Max_value
then H:=2+r_dist-b_dist
else if B=max_value
then H:=4+g_dist-r_dist;
H:=H*60;
if H<0 then H:=H+360;
end;
// Это и есть .Н в НSV
end;
Сам цвет что-то вроде
Цвет = H / (360/7)

Процедуру RGB2HSV уже сам по моему сможешь дописать ..
Н - это "тоновый угол" весь спектр 360 градусов
Чтобы получить спектральные цвета нужно просто разделить на 360 деленное 7 ...
Зы
r_dist:=(max_value-R) / diff;
g_dist:=(max_value-G) / diff;
b_dist:=(max_value-B) / diff;

Извини просмотрел чью-то опечатку ...
Код писал не я в действии пока не пробовал но на первый взгляд работать может ...
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 248

Рейтинг@Mail.ru
cron