Иллюстрированный самоучитель по Delphi 7 для профессионалов

Класс TBitmap

Само значение свойства 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
Line^[j]: = 255 -Line^[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: THandle;
BackBitmap: Graphics.TBitmap;
initialization
CardsDll: = LoadLibraryEx('cards.dll',0, LOAD_LIBRARY__AS_DATAFILE);
BackBitmap: = Graphics.TBitmap.Create;
BackBitmap.LoadFromResourcelD(CardsDll, 64);
finalization
BackBitmap.Free;
FreeLibrary(CardsDll);
end.

Примечание
В Windows 95/98 эта динамическая библиотека – 16-разрядная, и работать так, как описано, не будет. Используйте библиотеку Cards.dll из состава Windows NT, 2000
.

Аналогичным образом можно загрузить битовые карты для всей колоды. При показе карты, в зависимости от того, открыта она или закрыта, отрисовывается один из объектов TBitmap:

if Known then // карта открыта
Canvas.StretchDraw(ClientRect, FaceBitmap)
else
Canvas.StretchDraw(ClientRect,BackBitmap)
end;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.