Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Порог между двумя цветами на Bitmap

Delphi , Графика и Игры , Bitmap



Автор: Fenik
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Bitmap преобразуется в двухцветное изображение.

Зависимости: Graphics
Автор:       Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright:   Собственное написание (Николай федоровских)
Дата:        1 июня 2002 г.
***************************************************** }

procedure Threshold(Bitmap: TBitmap; Value: Byte; Color1, Color2: TColor);
type
  TRGB = record
    B, G, R: Byte;
  end;
  pRGB = ^TRGB;

  function ColorToRGB(Color: TColor): TRGB;
  begin
    with Result do
    begin
      R := Lo(Color);
      G := Lo(Color shr 8);
      B := Lo((Color shr 8) shr 8);
    end;
  end;

var
  x, y: Word;
  C1, C2: TRGB;
  Dest: pRGB;
begin
  Bitmap.PixelFormat := pf24Bit;
  C1 := ColorToRGB(Color1);
  C2 := ColorToRGB(Color2);
  for y := 0 to Bitmap.Height - 1 do
  begin
    Dest := Bitmap.ScanLine[y];
    for x := 0 to Bitmap.Width - 1 do
    begin
      //если среднеарифметическое R, G и B больше Value,
      //то точку (x, y) закрашиваем цветом Color1,
      //иначе - цветом Color2
      if (Dest^.r + Dest^.g + Dest^.b) / 3 > Value then
        Dest^ := C1
      else
        Dest^ := C2;
      Inc(Dest);
    end;
  end;
end;

Пример использования:

Threshold(FBitmap, 127, clWhite, clBlack); 

Программа UBPFD (Universal Binary Picture Filter Designer) - это программное обеспечение на языке Delphi, которое преобразует битмап в двухцветную картинку. Процедура Threshold принимает объект TBitmap и три значения цвета (Value, Color1 и Color2) в качестве входных параметров.

Затем она проходит по каждому пикселю битмапа и определяет, должен ли он быть окрашен в Color1 или Color2 на основе порогового значения. Для преобразования данных цветов в RGB-значения программа использует функцию ColorToRGB.

До начала обработки битмапа программой устанавливается формат пикселя в pf24Bit, что означает, что каждый пиксель будет обрабатываться как 24-битное цветное значение (R-G-B).

Процесс работы следующий:

  1. Для каждой строки пикселей битмапа (for y := 0 to Bitmap.Height - 1 do) устанавливается указатель Dest на текущую строку (Bitmap.ScanLine[y]).
  2. Внутри этого цикла для каждого пикселя в строке (for x := 0 to Bitmap.Width - 1 do) программа рассчитывает среднюю интенсивность RGB-значений пикселя.
  3. Если средняя интенсивность больше порогового значения, то она устанавливает цвет текущего пикселя в Color1; иначе, она устанавливает его в Color2.

Вот как это работает:

Dest^.r   + Dest^.g   + Dest^.b

вычисляет сумму красного, зеленого и синего компонентов текущего пикселя.

(Dest^.r   + Dest^.g   + Dest^.b)  / 3

затем делит эту сумму на 3 для расчета средней интенсивности.

if-statement сравнивает эту среднюю интенсивность с пороговым значением:

if  (Dest^.r   + Dest^.g   + Dest^.b)  / 3  > Value then
    Dest^  := C1
else
    Dest^  := C2;

Если средняя интенсивность больше порога, то она устанавливает цвет текущего пикселя в Color1 (C1). В противном случае она устанавливает его в Color2 (C2).

Стatement Inc(Dest); инкрементирует указатель Dest после обработки каждого пикселя в строке.

В конце процедуры битмап обрабатывается и преобразуется в двухцветную картинку на основе заданного порогового значения.

Процедура Threshold переводит Bitmap в двухцветное изображение, занимаясь порогом между двумя цветами Color1 и Color2.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Bitmap ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-04 07:37:07/0.0082600116729736/1