Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Media";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.035 c
3-1118139074
Ярослав
2005-06-07 14:11
2005.07.18
Предача списка в качестве параметра в ХП MS SQL


14-1119552020
TBender
2005-06-23 22:40
2005.07.18
Сворачивание формы


4-1116825158
HotSpot
2005-05-23 09:12
2005.07.18
Не удается создать новое сообщение в Outlook Express


14-1118900080
Ega23
2005-06-16 09:34
2005.07.18
С днем рождения! 16 июня


4-1116942710
Aleksandr.
2005-05-24 17:51
2005.07.18
Будет ли работать PostMessage из dll?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский