Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры печатать.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
379.36 Кб
Скачать

104 Работа с битовыми образами. Функции BitBlt() и PlgBlt(). Загрузка и вывод на экран битовых образов. Обработка битовых образов при помощи функции Windows nt MaskBlt().

Для формирования сложных изображений используют битовые образы. Битовый образ — это, как правило, небольшая картинка, которая находится в памяти компьютера.

Сформировать битовый образ можно путем загрузки из bmp-файла или из ресурса, а также путем копирования фрагмента из другого битового образа, в том числе и с поверхности формы.

Картинку битового образа (иногда говорят просто "битовый образ") можно подготовить при помощи графического редактора или, если предполагается, что битовый образ будет загружен из ресурса программы, — при помощи редактора ресурсов (например, Borland Resource Workshop). В последнем случае надо создать файл ресурсов и поместить в него битовый образ. Файл ресурсов можно создать и при помощи утилиты Image Editor.

В программе битовый образ — это объект типа TBitmap.

Загрузку картинки из файла обеспечивает метод LoadFromFile, которому в качестве параметра передается имя bmp-файла.

После того как битовый образ сформирован (загружен из файла или из ресурса), его можно вывести, например, на поверхность формы или компонента image. Сделать это можно, применив метод Draw к свойству Canvas. В качестве параметров методу Draw надо передать координаты точки, от которой будет выведен битовый образ. Например, оператор

Canvas->Draw(10,20,Plane);

выводит на поверхность формы битовый образ plane — изображение самолета.

Функция BitBlt используется для выполнения операции копирования отдельных битов из области источника изображения в область-получатель. Функция позволяет передавать прямоугольную область из контекста устройства в контекст другого устройства. В случае ошибки функция возвращает 0. В успешном случае возвращается ненулевое значение.

СинтаксисBOOL BitBlt(

HDC hdcDest, // дескриптор целевого DC

int nXDest, // x-коорд. левого верхнего угла целевого прямоугольника

int nYDest, // y-коорд. левого верхнего угла целевого прямоугольника

int nWidth, // ширина целевого прямоугольника

int nHeight, // высота целевого прямоугольника

HDC hdcSrc, // дескриптор исходного DC

int nXSrc, // x-коорд. левого верхнего угла исходного прямоугольника

int nYSrc, // y-коорд. левого верхнего угла исходного прямоугольника

DWORD dwRop // код растровой операции

);

Функция PlgBlt выполняет передачу блоков битов данных о цвете из заданного прямоугольника в исходном контексте устройства в заданный параллелограмм в целевом контексте устройства. Если данный дескриптор битовой маски идентифицирует правильный одноцветный точечный рисунок, функция использует этот точечный рисунок, чтобы маскировать биты данных о цвете исходного прямоугольника.

СинтаксисBOOL PlgBlt(

HDC hdcDest, // дескриптор целевого DC

CONST POINT *lpPoint, // целевые вершины

HDC hdcSrc, // дескриптор источникового DC

int nXSrc, // x-коорд. левого верхнего угла источника

int nYSrc, // y-коорд. левого верхнего угла источника

int nWidth, // ширина источникового прямоугольника

int nHeight, // высота источникового прямоугольника

HBITMAP hbmMask, // дескриптор битовой маски

int xMask, // x-коорд. левого верхнего угла битовой маски

int yMask // y-коорд. левого верхнего угла битовой маски

);

Функция MaskBlt объединяет данные о цвете исходного и целевого точечных рисунков, используя заданную маску и растровую операцию.

СинтаксисBOOL MaskBlt(

HDC hdcDest, // дескриптор целевого DC

int nXDest, // x-коорд. верхнего левого угла цели

int nYDest, // y-коорд. верхнего левого угла цели

int nWidth, // ширина источника и цели

int nHeight, // высота источника и цели

HDC hdcSrc, // дескриптор источникового DC

int nXSrc, // x-коорд. верхнего левого угла источника

int nYSrc, // y-коорд. верхнего левого угла источника

HBITMAP hbmMask, // дескриптор монохромной битовой маски

int xMask, // горизонтальное смещение внутри битовой маски

int yMask, // вертикальное смещение внутри битовой маски

DWORD dwRop // код растровой операции

);