![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Порог между двумя цветами на BitmapDelphi , Графика и Игры , Bitmap
Автор: Fenik { **** 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). Процесс работы следующий:
Вот как это работает:
вычисляет сумму красного, зеленого и синего компонентов текущего пикселя.
затем делит эту сумму на 3 для расчета средней интенсивности.
Если средняя интенсивность больше порога, то она устанавливает цвет текущего пикселя в Color1 ( Стatement В конце процедуры битмап обрабатывается и преобразуется в двухцветную картинку на основе заданного порогового значения. Процедура Threshold переводит Bitmap в двухцветное изображение, занимаясь порогом между двумя цветами Color1 и Color2. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |