Сделать скриншот экрана с помощью DirectX достаточно просто, следующий код на C++ демонстрирует, как сделать скриншот экрана.
#include <d3d9.h>
#include <D3dx9tex.h>
#pragma comment (lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
IDirect3DSurface9 * g_pSurface = NULL;
LPDIRECT3DDEVICE9 g_pDevice = NULL;
LPDIRECT3D9 g_pD3D = NULL;
#include <d3d9.h>
#include <D3dx9tex.h>
#pragma comment (lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
IDirect3DSurface9 * g_pSurface = NULL;
LPDIRECT3DDEVICE9 g_pDevice = NULL;
LPDIRECT3D9 g_pD3D = NULL;
BOOL InitDInterface()
{
//Инициализация DirectX
if( NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return FALSE;
//Получаем параметры Width & Height для экрана
D3DDISPLAYMODE D3DMode = {0};
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &D3DMode)))
{
ReleaseDInterface();
return FALSE;
}
//Заполняем структуру,
D3DPRESENT_PARAMETERS D3DParameters;
ZeroMemory(&D3DParameters, sizeof(D3DPRESENT_PARAMETERS));
D3DParameters.BackBufferWidth = D3DMode.Width;
D3DParameters.BackBufferHeight = D3DMode.Height;
D3DParameters.Windowed = TRUE;
D3DParameters.SwapEffect = D3DSWAPEFFECT_DISCARD;
D3DParameters.BackBufferFormat = D3DMode.Format;
//Создаем устройство
if(FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow(),
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&D3DParameters, &g_pDevice )))
{
ReleaseDInterface();
return FALSE;
}
//Подготовка к захвату
if(FAILED(g_pDevice->CreateOffscreenPlainSurface(D3DMode.Width,
D3DMode.Height,
D3DFMT_A8R8G8B8,
D3DPOOL_SCRATCH,
&g_pSurface, NULL)))
{
ReleaseDInterface();
return FALSE;
}
//Сам захват.
if(FAILED(g_pDevice->GetFrontBufferData(0, g_pSurface)))
{
ReleaseDInterface();
return FALSE;
}
//Сохраняем на диске
D3DXSaveSurfaceToFileA("test.bmp", D3DXIFF_BMP, g_pSurface, NULL, NULL);
return TRUE;
}
VOID ReleaseDInterface()
{
if(g_pD3D != NULL)
g_pD3D->Release();
if(g_pDevice != NULL)
g_pDevice->Release();
if(g_pSurface != NULL)
g_pSurface->Release();
g_pD3D = NULL;
g_pDevice = NULL;
g_pSurface = NULL;
}
P.S Необходимо скачать DirectX SDK с сайта MSDN и настроить пути к библиотекам и заголовочным файлам в проекте.
Комментариев нет:
Отправить комментарий