Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Работа с растровыми изображениями. 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-файлы.





Дата публикования: 2014-12-28; Прочитано: 227 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...