HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Как преобразовать цветное изображение в черно-белое? (делфи/билдер)
  #1  
Старый 11.04.2010, 14:06
M_script_
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
С нами: 9227388

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

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

P.S.: Monochrome = true и PixelFormat = pf1bit не подходят.
 
Ответить с цитированием

  #2  
Старый 11.04.2010, 14:48
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 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;
 
Ответить с цитированием

  #3  
Старый 11.04.2010, 14:54
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

Число 128 - это порог сравнения. Его можно менять чтобы подогнать под нужный вид.
Часто 80 идет очень хороош
 
Ответить с цитированием

  #4  
Старый 11.04.2010, 17:18
M_script_
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
С нами: 9227388

Репутация: 180
По умолчанию

slesh, спасибо за пример.
[offtop]
Не подскажешь, как правильно уничтожить объект TImage в билдере, чтобы освободить всю память?
[/offtop]
 
Ответить с цитированием

  #5  
Старый 11.04.2010, 21:23
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

*****.Destroy();
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взлом домофона Метаком andreipup Болталка 11 14.08.2009 16:06
Как стать хакером! foreva Болталка 19 12.12.2007 00:12
Установка Windoze глазами линуксоида (100% факты) nerezus Болталка 47 16.10.2005 15:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.