PDA

Просмотр полной версии : Как преобразовать цветное изображение в черно-белое? (делфи/билдер)


M_script_
11.04.2010, 14:06
Формат - bmp, хотя можно на примере jpeg, gif. Нужно преобразовать цветную картинку в черно-белую (не оттенки серого).

P.S.: Monochrome = true и PixelFormat = pf1bit не подходят.

slesh
11.04.2010, 14:48
самый преметивный сопсоб: простым сравнение средней яркости. Тупой способ, но более менее норм выглядит и простой. Вот не оптимизированный вариант.

procedure TForm1.Button1Click(Sender: TObject);
var
x, y : integer;
r, g, b : byte;
c : dword;
begin
Image1.Picture.LoadFromFile('d:\1.bmp');

for y := 0 to Image1.Height-1 do
begin
for x := 0 to Image1.Width-1 do
begin
c := Image1.Canvas.Pixels[x,y];
r := GetRValue(c);
g := GetGValue(c);
b := GetBValue(c);

if (r + g + b) div 3 > 128 then
begin
Image1.Canvas.Pixels[x,y] := clWhite;
end
else
begin
Image1.Canvas.Pixels[x,y] := clBlack;
end;
end;
end;
end;

slesh
11.04.2010, 14:54
Число 128 - это порог сравнения. Его можно менять чтобы подогнать под нужный вид.
Часто 80 идет очень хороош

M_script_
11.04.2010, 17:18
slesh, спасибо за пример.

Не подскажешь, как правильно уничтожить объект TImage в билдере, чтобы освободить всю память?

slesh
11.04.2010, 21:23
*****.Destroy();