Лекция: Работа с растровыми изображениями. Bitmap-растры.

В среде Windows существует специальный тип ресурсов- растровые изображения(BitMap-растры). Они используются в двух случаях:

•для создания собственных кистей на основе BitMap-растров и заполненияими фона фигур;

•для отображения графических изображений, которые проще создать в графическом редакторе Imagedit.exe,загрузить их в файл ресурса, а затем использовать в проекте, чем рисовать API -функциями. Для создания кисти на основе BitMap-растра существуют два способа. Первый способ основан на получении дескриптора BitMap-растра, загруженного в файл ресурса, использует одну из функций:

LoadResPicture(ByVallpBitmapNameAsLong,vbResBitmap) AsLongилиLoadBitmap(ByValhInstanceAsLong, ByVallpBitmapNameAsLong) AsLong,где lpBitmapName—имя BitMap-растра в файле ресурса, а первый параметр в функции LoadBitmapтот же, что и функции LoadIcon.

Второй способ основан на получении дескриптора, создаваемого в программе BitMap-растра, и использует функцию:CreateBitmap(ByValnWidthAsLong, ByValnHeightAsLong, ByValnPlanesAsLong, ByValnBitCountAsLong,lpBitsAsAny) AsLong

Параметрами этой функции являются ширина и высота BitMap-растра(карты бит), число цветовых плоскостей в карте бит, число бит цвета на элемент отображения дисплея и указатель на массив двоичных чисел BitMap-растра. Дескриптор кисти, создаваемый на основе BitMap-растра (дескриптор которого возвращается одной из трех приведенных выше функций), получают функцией:CreatePatternBrush(ByValhBitmapAsLong)AsLongДалее дескриптор созданной кисти необходимо установить в контекст устройства функцией:SelectObject(ByValhdcAsLong, ByValhObjectAsLong) AsLongПосле того, как растровое изображение и кисть больше не будут использоваться в программе, их необходимо удалить из памяти функцией

DeleteObject(ByValhObjectAsLong) AsLongУдалять созданные объекты необходимо обязательно, так как память под BitMap-растр выделяется одна и таже вместе с программой, и наложение AND иXOR-масок предыдущего и вновь создаваемого изображений может привести к зависанию компьютера, а заливка фигур будет практически не предсказуема.

С помощью функции StretchBltизображение можно не только сжимать, растягивать, но даже выворачивать на изнанку, задавая параметры с разными знаками. Чтобы избежать потери растрового изображения при уменьшении размера, рекомендуется использовать функцию SetStretchBltMode(ByValhdcAsLong, ByValnStretchModeAsLong) AsLong,которая устанавливает один из режимов коррекции в nStretchMode:

•WHITEONBLACK=1-cохранить белые пиксели засчет черных;

•BLACKONWHITE=2-cохранить черные пиксели за счет белых;

•COLORONCOLOR=3 –используется для цветных графических изображений. Основное различие между функциями BitBlt, StretchBltи методом PaintPictureв Visual Basic заключается в том, что метод можно применять только к определенному объекту(Picture, форме, принтеру), а с помощью функций BitBltи StretchBltможно выполнять копирование пикселей изображения в пределах рабочего стола. Их можно использовать для создания разнообразных приложений, например, программ копирования экрана, чего не позволяет метод PaintPicture.

Второй способ анимации основан на формировании изображения(образа) в окне на основе Bitmap-растра. Для этого сначала в памяти создается временный контекст функцией CreateCompatibleDc.Далее в него загружается Bitmap-растр из файла ресурса, используя функции LoadBitmapиSelectObject.Затем он копируется из временного контекста в контекст устройства экрана функцией BitBltили StretchBlt.При этом если Вы выбрали черный цвет фона окна приемника(он имеет нулевую цветовую палитру), то это позволит Вам использовать режим vbSrcInvert в функции BitBltили StretchBltпри наложении образа из памяти(Scr-источник) на экран(Dest-приемник) по логическому выражению ScrXorDest.Если цвет фона под образом отличен от черного, то следует скопировать его для последующего затирания образа в окне приемника, чтобы

Происходило движение. При этом напомню, что режим vbSrcAnd позволяет копировать из источника все биты, кроме белых, режим vbSrcPaint-копировать только белые биты, а режим vbSrcCopy-полностью копирует биты из источника в приемник.Осуществить перемещение графических образов можно не только из файла ресурса, но из файлов, расположенных на диске. Для этого вместо функции LoadBitmapследует воспользоваться функцией LoadPicture(«Имяbmp-файла») объекта stdole.

В третьем способе анимации также, как и при использовании первого способа, графический образ создается в окне API-функциями ядра Windows,однако затем он копируется в память, откуда проецируется в окно через промежуток времени, создавая эффект движения. Чтобы поместить изображение в память, необходимо сначала создать временный контекст функцией CreateCompatibleDCи пустой BitMap-растр, совместимый с экранным контекстом, функцией CreateCompatibleBitMap(как это было показано в

Далее функцией SelectObjectпустой BitMap-растр устанавливается во временном контексте, а затем в него копируется графический образ с экрана функцией BitBltили StretchBlt.Далее происходит циклическое отображение образа из временного контекста на экране и его затирания.

Обращаю Ваше внимание, что функции mciSendString, mciExecuteмогут озвучивать mp3, midi,и wav-файлы, а функция sndPlaySound-лишь wav-файлы.


еще рефераты
Еще работы по информатике