ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

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

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

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

  #2  
Старый 11.04.2010, 14:48
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

самый преметивный сопсоб: простым сравнение средней яркости. Тупой способ, но более менее норм выглядит и простой. Вот не оптимизированный вариант.
Код:
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
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

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

  #4  
Старый 11.04.2010, 17:18
Аватар для M_script_
M_script_
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме:
1819761

Репутация: 180
Отправить сообщение для M_script_ с помощью ICQ
По умолчанию

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

  #5  
Старый 11.04.2010, 21:23
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

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



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



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


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




ANTICHAT.XYZ