Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Преобразование в ч/б   Найти похожие ветки 

 
seregka   (2005-03-20 11:35) [0]

Как "очернобелить" картинку???
Спасибо


 
Fenik   (2005-03-20 17:01) [1]

type
 TRGB = packed record
   B, G, R: Byte;
 end;
 pRGB = ^TRGB;

function ColorToRGB(Color: TColor): TRGB;
begin
 with Result do begin
   R := Lo(Color);
   G := Lo(Color shr 8);
   B := Lo((Color shr 8) shr 8);
 end;
end;

procedure Threshold(Bitmap: TBitmap; Value: Byte; Color1, Color2: TColor);
var x, y: Word;
   C1, C2: TRGB;
   Dest: pRGB;
begin
 C1 := ColorToRGB(Color1);
 C2 := ColorToRGB(Color2);
 for y := 0 to Bitmap.Height - 1 do begin
   Dest := Bitmap.ScanLine[y];
   for x := 0 to Bitmap.Width - 1 do begin
     if (Dest^.b + Dest^.g + Dest^.r) / 3 > Value
       then Dest^ := C1
       else Dest^ := C2;
     Inc(Dest);
   end;
 end;
end;

Threshold(Bmp, 127, clWhite, clBlack);


 
Fenik   (2005-03-20 17:02) [2]

Как обычно забыл напомнить: только для 24-битных растров.


 
seregka   (2005-03-20 18:54) [3]

а как для 32 битных делать???


 
AlterEgo of WondeRu ©   (2005-03-20 18:57) [4]

Fenik   (20.03.05 17:01) [1]
(Dest^.b + Dest^.g + Dest^.r) / 3


формула неверна!!!!!!!


 
Anatoly Podgoretsky ©   (2005-03-20 18:59) [5]

AlterEgo of WondeRu ©   (20.03.05 18:57) [4]
Не то слово, там такое получится.


 
AlterEgo of WondeRu ©   (2005-03-20 19:00) [6]

пост 16

http://delphimaster.net/view/8-1108377216/


 
Fenik   (2005-03-20 19:01) [7]

> seregka  (20.03.05 18:54) [3]
> а как для 32 битных делать???


Также. Только тип будет

TRGB = packed record
 B, G, R, A: Byte;
end;

> AlterEgo of WondeRu ©  (20.03.05 18:57) [4]
> формула неверна!!!!!!!


Я тебя не понимаю. В черно-белое переводит? Переводит.
Тогда в чем проблема?
Я, когда писал, не думал про науку.
Приведи верную формулу, а не кричи.


 
Fenik   (2005-03-20 19:03) [8]

> Anatoly Podgoretsky ©  (20.03.05 18:59) [5]
> Не то слово, там такое получится.


Да ну? ;)


 
AlterEgo of WondeRu ©   (2005-03-20 19:13) [9]

Fenik   (20.03.05 19:01) [7]
Приведи верную формулу, а не кричи.


привел в 6, а я никогда ни кричу... это просто эмоции...


 
Fenik   (2005-03-20 19:20) [10]

> AlterEgo of WondeRu ©  (20.03.05 19:13) [9]
> привел в 6, а я никогда ни кричу... это просто эмоции...


Ага верно, вы ведь, батенька, Альтер-Эго! :))


 
Anatoly Podgoretsky ©   (2005-03-20 19:21) [11]

Fenik   (20.03.05 19:01) [7]
На угрозу не отвечаю, с этим в песочницу.


 
Fenik   (2005-03-20 19:25) [12]

> Anatoly Podgoretsky ©  (20.03.05 19:21) [11]
> На угрозу не отвечаю, с этим в песочницу.


Щас, за ведёрком только сбегаю :))))))


 
Anatoly Podgoretsky ©   (2005-03-20 19:30) [13]

Зря, если бы без твоего налета, то я бы привел формулу, а так продолжай дураком жить.


 
Fenik   (2005-03-20 19:50) [14]

> Anatoly Podgoretsky ©  (20.03.05 19:30) [13]
> Зря, если бы без твоего налета, то я бы привел формулу, а так продолжай дураком жить.


Неужто всё так серьезно?
I = 0.299R + 0.587G + 0.114B

-------
Смайлики незаметные что ли?  :))


 
seregka   (2005-03-20 20:03) [15]

Ладно парни, прекращайте ругаться.

Г-ну Фенику вопрос:

код рабочий, но одно НО: картинка становится чернобелой не сразу, а только после очередной операции над Image (например, поворот на 90), т.е. сразу ч/б и перевернутое.


 
Fenik   (2005-03-20 20:10) [16]

> seregka  (20.03.05 20:03) [15]
> Г-ну Фенику вопрос:
> код рабочий, но одно НО: картинка становится чернобелой не сразу, а только после очередной операции над Image (например, поворот на 90), т.е. сразу ч/б и перевернутое.


Не вижу вопроса. Причем здесь поворот?
Нужно повернуть и одновременно сделать ч\б?


 
seregka   (2005-03-20 20:32) [17]

нет.
Объясню популярно:
допустим я повесил ч\б на Button1, поворот на Button2.

Если я нажимаю на Button1 ничего не происходит. Если же после этого на Button2, то картинка сразу поворачивается и становится черно-белой.


 
Anatoly Podgoretsky ©   (2005-03-20 21:04) [18]

Fenik   (20.03.05 19:50) [14]
Выходит, что ты специально подставил парня, приведя заведомо ложный код [1]

seregka   (20.03.05 20:03) [15]
Рабочий говоришь, тогда сделай три прямоугольника и закрась их -один 100% красного, другой 100% зеленого и последний 100% синего затем преобразуй и посмотри глазами. При правильной формуле яркость зеленого цвета должна быть примерно в 6 раз меньше, чем синего.


 
Fenik   (2005-03-20 21:05) [19]

"У тебя ошибка в программе." (с) АП  :))

Я не телепат. Код покажи.
Наверное экран не обновляешь после нажатия на Button1.


 
Fenik   (2005-03-20 21:11) [20]

> Anatoly Podgoretsky ©  (20.03.05 21:04) [18]
> Выходит, что ты специально подставил парня, приведя заведомо ложный код [1]


:)
У меня в старой программе (когда писал её, не знал еще про эту формулу) был тот код, что я привел в [1]. Я просто выдрал его оттуда, забыв, что есть правильная формула. А потом меня удивила эмоциональная реакция AlterEgo of WondeRu.

Делать мне больше нечего, как подставлять кого-то.


 
Anatoly Podgoretsky ©   (2005-03-20 21:13) [21]

Fenik   (20.03.05 21:05) [19]
Молодец, знаешь и права соблюдаешь.
Ты бы ранее вместо наезда спросил бы почему тебе сказали, что код неверный и не было бы инцидента.
Если автору вопроса интересно, то я могу привести более полный список коэффициентов. Этот не единственный и они должны использоваться в зависимости от области применения.


 
Anatoly Podgoretsky ©   (2005-03-20 21:14) [22]

Fenik   (20.03.05 21:11) [20]
Ну все будем считать, что ты понял и извинился.


 
Fenik   (2005-03-20 21:18) [23]

> Anatoly Podgoretsky ©  (20.03.05 21:13) [21]
> Если автору вопроса интересно, то я могу привести более полный список коэффициентов. Этот не единственный и они должны использоваться в зависимости от области применения.


Интересно не только автору вопроса..


 
seregka   (2005-03-20 21:59) [24]

procedure Threshold(Bitmap: TBitmap; Value: Byte; Color1, Color2: TColor);

function ColorToRGB(Color: TColor): TRGB;
begin
with Result do begin
  R := Lo(Color);
  G := Lo(Color shr 8);
  B := Lo((Color shr 8) shr 8);
end;
end;

type
TRGB = packed record
  B, G, R: Byte;
end;
pRGB = ^TRGB;

var x, y: Word;
  C1, C2: TRGB;
  Dest: pRGB;
begin
C1 := ColorToRGB(Color1);
C2 := ColorToRGB(Color2);
for y := 0 to Bitmap.Height - 1 do begin
  Dest := Bitmap.ScanLine[y];
  for x := 0 to Bitmap.Width - 1 do begin
    if (Dest^.b + Dest^.g + Dest^.r) / 3 > Value
      then Dest^ := C1
      else Dest^ := C2;
    Inc(Dest);
  end;
end;
end;

procedure form1.button1click(sennder...);
begin
bmp:=image1.picture.bitmap;
Threshold(Bmp, 127, clWhite, clBlack);
end;


 
Anatoly Podgoretsky ©   (2005-03-20 22:04) [25]

Y = K1*R + K2*G + K3*B

1. 0,360*R + 0.530*G + 0.110*B
2. Стандаpт CCIR 601-1 (как в стандаpтной VGA-ой функции):
 0,299*R + 0,587*G + 0,114*B
3. Стандаpт CCIR 709:
 0,213*R + 0,715*G + 0,072*B
4. Стандаpт ITU:
 0,222*R + 0,707*G + 0,071*B


 
WondeRu ©   (2005-03-21 09:09) [26]

Fenik   (20.03.05 21:11) [20]
А потом меня удивила эмоциональная реакция AlterEgo of WondeRu.


нормальная реакция!!! (по крайней мере для меня!!!)

Anatoly Podgoretsky ©   (20.03.05 22:04) [25]

век живи, век учись! Спасибо за формулы, знал только вторую! А откуда дровишки, очень интересно? :)


 
Fenik   (2005-03-21 20:06) [27]

> Anatoly Podgoretsky ©  (20.03.05 22:04) [25]

Спасибо.

> seregka  (20.03.05 21:59) [24]

1. if (0.114*Dest^.b + 0.587*Dest^.g + 0.299*Dest^.r) > Value
Хоть результат будет похож на пердыдущий, но зато "правильный" :))

2. Так я и думал - не обновляешь экран.
procedure form1.button1click(sennder...);
begin
 bmp:=image1.picture.bitmap;
 Threshold(Bmp, 127, clWhite, clBlack);
 Image1.RePaint;
end;

> WondeRu ©  (21.03.05 09:09) [26]
> нормальная реакция!!! (по крайней мере для меня!!!)


Я ЭТО ПРИМУ К СВЕДЕНЬЮ !!!!!!!!!!!
:)


 
Anatoly Podgoretsky ©   (2005-03-21 20:15) [28]

WondeRu ©   (21.03.05 09:09) [26]
Из Интернет вестимо, зная названия стандартов можно определить область применения, но для большинства случаев, то есть для экранных изображений нужна вторая, а вот вывод на печать, факсы, фотографии нужны другии.


 
uny ©   (2005-03-22 06:03) [29]

вестимо например отсюда:
http://www.rudtp.ru/articles.php?id=44



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.03 c
14-1119506487
Ega23
2005-06-23 10:01
2005.07.18
С днем рождения! 23 июня


14-1119966211
Desam
2005-06-28 17:43
2005.07.18
Что бы вы хотели видеть?


9-1112593955
4ECHOK
2005-04-04 09:52
2005.07.18
[GLScene] Загрузка карты из XML


1-1119801165
Euro
2005-06-26 19:52
2005.07.18
Modal Form


1-1120384016
aapp
2005-07-03 13:46
2005.07.18
Использование *.h