Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как качественно перевести цветную картинку в черно-белую [D6]


dmitriyk ©   (2002-01-31 03:22:00) 

Народ! Может кто знает как перевести картинку в черно-белую, при этом не теряя качества. Пробовал процедуру, которая есть в этом форуме, там где использованы стандартные коэыициенты перевода, применяемые на TV, но она в итоге, сильно искажает картинку.
Може кто поможет готовым кодом. буду признателен.


Donal_Graeme   (2002-02-03 20:59:00) [1]

procedure ToGray(Bm1 : TBitmap; BR : TBitmap);
var I, J, K : Integer;
R, G, B, C : Byte;
L1, L2 : PByteArray;
begin
If Bm1.PixelFormat <> pf24bit then Bm1.PixelFormat := pf24bit;
BR.Width := Bm1.Width;
BR.Height := Bm1.Height;
BR.PixelFormat := pf24bit;
For I := 0 to Bm1.Height -1 do
begin
L1 := Bm1.ScanLine [I];
L2 := BR.ScanLine [I];
For J := 0 to Bm1.Width -1 do
begin
K := J*3;
B := L1[K];
Inc(K);
G := L1[K];
Inc(K);
R := L1[K];
C := (299*R +587*G +114*B) div 1000;
L2[K] := C;
Dec(K);
L2[K] := C;
Dec(K);
L2[K] := C;
end;
end;
end;


dmitriyk   (2002-02-02 04:25:00) [2]

>Фэ, VuDZ

Спасибо большое. Вопросов пока нет.


Фэ   (2002-02-01 09:50:00) [3]

Да что за черт
ftp://ftp.pi8plus.ru/pub/download/math/images/togray/


Фэ   (2002-02-01 09:48:00) [4]

Sorry
ftp://ftp.pi8plus.ru/download/math/images/togray


Фэ   (2002-02-01 09:47:00) [5]

>dmitriyk
Обрати еще раз внимание на гамма-коррекцию.
А вот тебе пример софта и сконвертированных изображений
ftp://ftp.pi8plus.ru/download/math/image/togray

25,872 d3.jpg метод RGB/3
27,046 gamma1_5.jpg Гамма-коррекция 1.5
27,068 gamma2_0.jpg -"- 2.0
26,703 gamma2_5.jpg -"- 2.5
29,734 test.jpg Тестовая картинка
235,008 togray.exe Тест
25,928 tv.jpg Метод TV

ВОпросы остануться - отвечу.


VuDZ   (2002-02-01 04:55:00) [6]


for( int i=0; i < nColors; i++)
{
long lSquareSum = bmInfo.bmiColors[i].rgbRed
* bmInfo.bmiColors[i].rgbRed
+ bmInfo.bmiColors[i].rgbGreen
* bmInfo.bmiColors[i].rgbGreen
+ bmInfo.bmiColors[i].rgbBlue
* bmInfo.bmiColors[i].rgbBlue;
int nGray = (int)sqrt(((double)lSquareSum)/3);
pLP->palPalEntry[i].peRed = nGray;
pLP->palPalEntry[i].peGreen = nGray;
pLP->palPalEntry[i].peBlue = nGray;
pLP->palPalEntry[i].peFlags = 0;
}


http://www.codeguru.com/bitmap/grayscale.shtml
http://www.codeguru.com/bitmap/index.shtml


dmitriyk   (2002-02-01 03:22:00) [7]

Yuraz !

К сожалению ваша процедурка после преобразования, тоже портит картинку. Но всеравно, большое спасибо всем.


Yuraz   (2002-01-31 10:19:00) [8]

var p: TColor;
p1: byte;

{...}

for x := 0 to Image1.Width-1 do
for y := 0 to Image1.Height-1 do
begin
p := Image1.Canvas.pixels[x, y];
p1 := (GetRValue(p)+GetGValue(p)+GetBValue(p)) div 3;
Image1.Canvas.pixels[x, y] := RGB(p1, p1, p1);
end;


Фэ   (2002-01-31 10:14:00) [9]

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1012350234&n=7


Наверх

Титульная страница Поиск, карта сайта Написать письмо