Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_5(слайды)_2012.doc
Скачиваний:
14
Добавлен:
21.08.2019
Размер:
496.13 Кб
Скачать

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

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

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

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

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

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

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

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

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

#include "stdafx.h"

#include "resource.h"

#define MAX_LOADSTRING 100

// Global Variables:

HINSTANCE hInst;

TCHAR szTitle[MAX_LOADSTRING];

TCHAR szWindowClass[MAX_LOADSTRING];

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

// TODO: Place code here.

MSG msg;

HACCEL hAccelTable;

// Initialize global strings

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_PRINTSCREEN, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

// Perform application initialization:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_PRINTSCREEN);

// Main message loop:

while (GetMessage(&msg, NULL, 0, 0))

{

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

return msg.wParam;

}

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_PRINTSCREEN);

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = (LPCSTR)IDC_PRINTSCREEN;

wcex.lpszClassName = szWindowClass;

wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);

}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]