Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Работа с растровыми изображениями. 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-23; Просмотров: 540; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.