Visual Basic 6. Руководство разработчика

Функция


BitBlt()

Функция

BitBlt() используется для выполнения операции копирования отдельных битов из области-источника изображения в область-получатель. Функция позволяет передавать прямоугольную область из контекста устройства-источника в контекст устройства-получателя. Ранее в этой главе (приложение MenuBMP) приводился пример использования функции BitBlt(). Рассмотрим эту функцию более подробно и сравним ее с методом PaintPicture, встроенным в Visual Basic.

Функция BitBlt() объявляется следующим образом.

Declare Function BitBIt Lib "gdi32" Alias "BitBIt" (ByVal _

hDestDC As Long, ByVal x As Long, ByVal у As Long, _

ByVal nWidth As Long, ByVal nHeight As Long, ByVal _

hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, _

ByVal dwRop As Long) As Long

В отличие от метода PaintPicture, для вызова функции BitBlt() требуется указать все параметры. Необходимо указать начальные координаты Х и Y получателя, высоту и ширину передаваемого изображения, а также начальные координаты источника.

Прежде чем вызвать функцию BitBlt(), необходимо создать контекст устройства для объекта-источника и объекта-получателя с помощью функций CreateCompatibleDC() и CompatibleBitmapO. Если планируется использовать функцию BitBlt() для копи­рования содержимого элемента управления PictureBox, то контекстом устройства элемента управления является значение его свойства hWnd. Функцию BitBlt() можно использовать с любым контекстом устройства, даже с контекстом устройства растрового изображения, загруженного в память.

За исключением дескрипторов hDestDC

и hSrcDC, параметры функции BitBlt() такие, как и у метода PaintPicture. Они определяют координаты области-источника, содержимое которой будет скопировано (параметры источника), и координаты и размеры области-получателя, куда должны быть скопированы пиксели, образующие изображение (параметры получателя). Размеры областей источника и получателя должны быть одинаковыми. В табл. 13.7. приведены значения кодов растровых операций для параметра dwRop. Эти коды определяют, каким образом пиксели из области-источника объединяются с пикселями в области-получателе.




StretchBlt()

Для обработки растровых изображений можно воспользоваться функцией StretchBlt(). С помощью этой функции можно выполнять масштабирование (сжимать или растягивать) растровых изображений в процессе копирования. Функция StretchBlt() объявляется следующим образом.

Declare Function StretchBIt Lib "gdi32" Alias "StretchBIt" _

(ByVal hdc As Long, ByVal x As Long, ByVal у As Long, _

ByVal nWidth As Long, ByVal nHeight As Long, ByVal _

hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, _

ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, _

ByVal dwRop As Long) As Long

Функция StretchBlt() имеет те же параметры, что и функция BitBlt(), плюс два дополнительных параметра, которые определяют размер области-источника. С помощью функции Stretch Bit() изображение можно сжимать, растягивать и даже выворачивать наизнанку, задавая параметры с разными знаками. Коды растро­вых операций, содержащиеся в табл. 13.7, определяют способ объединения цветов пикселей области-источника и области-получателя.

Эти коды рассматривались в гл. 7. Можно запустить приложение PaintPic, рассмотренное там же, чтобы поэкспериментировать с различными кодами растровых операции. В приложении PaintPic используется метод PaintPicture, но растровые операции выполняют аналогичные преобразования.

Таблица 13.7. Коды растровых операций функций BitBlt() и StretchBlt()

Значение

Описание

BLACKNESS

Заполняет область-получатель черным цветом

DSTINVERT

Инвертирует область-получатель

MERGECOPY

Изображение определяется результатом выполнения операции побитового И над копируемым изображением и шаблоном

MERGEPAINT

Результирующее изображение определяется результатом выполнения операции побитового ИЛИ над инвертированным копируемым и областью-получателем

NOTSRCCOPY

Изображение определяется инвертированным исходным изображением

NOTSRCERASE

Результирующее изображение определяется результатом выполнения операции побитового ИЛИ над областью-источником и областью-получаталем с последующим инвертированием цвета

PATCOPY

Шаблон копируется в область получатель

PATINVERT

Изображение определяется результатом выполнения операции побитового исключающего ИЛИ над шаблоном и областью-получателем

PATPAINT

Изображение определяется результатом выполнения операции побитового ИЛИ над областью-источником и шаблоном с последующим объединением операцией ИЛИ с областью-получателем

SRCAND

Изображение определяется результатом выполнения операции побитового И над областью-источником и областью-получателем

SRCCOPY

Область-источник копируется в область-получатель без изменений

SRCERASE

Изображение определяется результатом выполнения операции побитового И над областью-источником и инвертированной областью-получателем

SRCINVERT

Изображение определяется результатом выполнения операции побитового исключающего ИЛИ над областью-источником и областью-получателем

SRCPAINT

Изображение определяется результатом выполнения операции побитового ИЛИ над областью-источником и областью-получателем

WHITNESS

Область-получатель заливается белым цветом



Содержание раздела