Функция
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 | Область-получатель заливается белым цветом |