Контекст для метафайла

Лекция №5. Работа с функция GDI. Захват изображения.

Чтобы восстановить на экране изображение, необходимо вызвать BitBlt второй раз, устанавливая совместимый контекст устройства как источниковый DC, а контекст устройства окна (или принтера) как целевой DC.

Далее необходимо выбрать созданный точечный рисунок в этот контекст устройства при помощи вызова функции SelectObject.

Захват изображения

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

1) Чтобы вывести изображение экрана в окно необходимо в первую очередь создать контекст для устройства DISPLAY с помощью функции CreateDC("DISPLAY", NULL, NULL, NULL) или GetDC(NULL);

1) Далее создаётся совместимый контекст в памяти для устройства DISPLAY с помощью функции CreateCompatibleDC.При этом создаётся контекст устройства (DC), который является совместимым с текущим контекстом устройства DISPLAY.

2) После того, как создан совместимый контекст устройства для дисплея,необходимо создать точечный рисунок с соответствующими размерами при помощи вызова функции CreateCompatibleBitmap;

4) Далее можно сделать захват изображения с помощью функции BitBlt. Эта функция выполняет пересылку блока битов - то есть она копирует данные с исходного точечного рисунка в принимающий точечный рисунок. В качестве параметров BitBlt принимает дескрипторы, которые идентифицируют два контекста устройства и копирует растровые данные с точечного рисунка, выбранного в источниковом DC в точечный рисунок, выбранный в целевом DC (целевой DC - совместимый контекст устройства). Таким образом когда BitBlt завершает передачу, изображение сохраняется в памяти.


Пример_1: Разработать Windows-приложение, которое захватывает изображение всего рабочего стола и выводит это изображение в главное окно приложения. (В программе есть ошибка, которую студенты должны исправить самостоятельно).

Альтернативный метод сохранения изображений представлен в виде метафайлов (metafile). Метафайл в строгом смысле рисунка не хранит, он сохраняет только последовательность команд (вызовов функций GDI) формирующих изображение.

Общие операции над метафайлами можно разделить на операции по созданию метафайла, то есть его записи и операции по воспроизведению метафайла на нужном контексте устройства.