ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
Как преобразовать цветное изображение в черно-белое? (делфи/билдер) |

11.04.2010, 14:06
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Как преобразовать цветное изображение в черно-белое? (делфи/билдер)
Формат - bmp, хотя можно на примере jpeg, gif. Нужно преобразовать цветную картинку в черно-белую (не оттенки серого).
P.S.: Monochrome = true и PixelFormat = pf1bit не подходят.
|
|
|

11.04.2010, 14:48
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
самый преметивный сопсоб: простым сравнение средней яркости. Тупой способ, но более менее норм выглядит и простой. Вот не оптимизированный вариант.
Код:
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;
|
|
|

11.04.2010, 14:54
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Число 128 - это порог сравнения. Его можно менять чтобы подогнать под нужный вид.
Часто 80 идет очень хороош
|
|
|

11.04.2010, 17:18
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
slesh, спасибо за пример.
[offtop]
Не подскажешь, как правильно уничтожить объект TImage в билдере, чтобы освободить всю память?
[/offtop]
|
|
|

11.04.2010, 21:23
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
*****.Destroy();
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|