Внутри строки данные упорядочены в соответствии с форматом (pixelFormat). Для формата pf8bit все просто - каждый байт в строке соответствует одному пикселу. Для форматов pfisbit и pfl6bit пикселу соответствуют два байта (в этих 16 битах упакованы данные о трех каналах), pf 24bit - три байта (по байту на канал).

Примерно так может выглядеть обработчик события OnMouseMove, выводящий на панель состояния информацию о яркости в данной точке (подразумевается, что формат битовой карты - 8 или 24 бита):

procédure TMainForm. ImagelMouseMove (Sender : TObject;
Shift: TShiftState;
X, Y: Integer);

begin if not Assigned(Imagel.Picture.Bitmap) then Exit; with Imagel. Picture. Bitmap, do case PixeiFormat of

pf8bit: Statusbarl. SimpleText :=Format('x: %dy: %db: %d' , [x, y, pByteArray(ScanLine[y])Л[x] ] ) ;
pf24bit: Statusbarl. SimpleText :=FormatCx: %dy: %dR: %d,G: %d, B: %d', [x,y, pByteArray(ScanLine[y])Л[3*x], pByteArray(ScanLine[y])A[ 3*x+l] , pByteArray(ScanLine[y])Л[ 3*x+2]]) ;
end;

Само значение свойства scanLine изменить нельзя (оно доступно только для чтения). Но можно изменить данные, на которые оно указывает. Вот так можно получить негатив 24-битной картинки:

Var line : pByteArray;
For i:=0 to Imagel.Picture.Bitmap.Height- 1 do begin
Line := Imagel.Picture.Bitmap.ScanLine[i];

For j:=0 to Imagel.Picture.Bitmap.Width * 3 - 1 do

LineA[j] := 255 - LineA[j];
End;

Если вы хотите решать более серьезные задачи - на уровне профессиональных средств - на помощь может прийти библиотека обработки изображений фирмы Intel (Intel Image Processing Library). Этот набор инструментов позволяет разработчику включать в программы алгоритмы обработки изображений, написанные и оптимизированные специально для процессоров фирмы Intel. Библиотека является свободно распространяемой, и последняя ее версия располагается на Web-сайте фирмы. Интерфейсы к функциям библиотеки для Delphi разработаны авторами этой книги и вместе с примерами находятся на прилагаемой к книге дискете.

(_Примечание )

В Delphi можно столкнуться с "тезкой" рассматриваемого объекта - структурой TBitmap, описанной в файле WINDOWS.PAS. Поскольку обе они относятся к одной и той же предметной области, часто возникают коллизии, приводящие к ошибкам. Напомним, чтобы отличить структуры-синонимы, следует использовать имя модуля, в котором они описаны. Поэтому если в вашей программе есть модули Windows и Graphics, то описывайте и употребляйте типы Windows.TBitmap И Graphics.TBitmap.

В состав Windows входят карточные игры (точнее, пасьянсы), которые черпают ресурсы из динамической библиотеки cards.dll. Если вы откроете эту библиотеку в редакторе ресурсов, то увидите там изображения всех пятидесяти двух карт и десятка вариантов их рубашек (оборотных сторон). Используем эту возможность для рисования карт. Так загружается битовая карта для рубашки:

var CardsDll : TBandle;
BackBitmap : Graphics.TBitmap;

initializaticn

CardsDll : = LoadLibraryEx('cards.dll',0, LOAD_LIBRARY_AS_DATAFILE);
BackBitmap := Graphics.TBitmap.Create ;
BackBitmap.LoadFromResourcelD(CardsDll,64) ;

⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Август
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс