Я знаю, как использовать GDI для захвата экрана, однако он очень медленный (он едва фиксирует 10 кадров в секунду)
Я читал, что DirectX предлагает лучшую скорость. Но прежде чем я начну изучать DirectX, я захотел проверить образец, чтобы увидеть, действительно ли это быстро.
Я нашел этот question, который предлагает пример кода для этого:
void dump_buffer()
{
IDirect3DSurface9* pRenderTarget=NULL;
IDirect3DSurface9* pDestTarget=NULL;
const char file[] = "Pickture.bmp";
// sanity checks.
if (Device == NULL)
return;
// get the render target surface.
HRESULT hr = Device->GetRenderTarget(0, &pRenderTarget);
// get the current adapter display mode.
//hr = pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddisplaymode);
// create a destination surface.
hr = Device->CreateOffscreenPlainSurface(DisplayMde.Width,
DisplayMde.Height,
DisplayMde.Format,
D3DPOOL_SYSTEMMEM,
&pDestTarget,
NULL);
//copy the render target to the destination surface.
hr = Device->GetRenderTargetData(pRenderTarget, pDestTarget);
//save its contents to a bitmap file.
hr = D3DXSaveSurfaceToFile(file,
D3DXIFF_BMP,
pDestTarget,
NULL,
NULL);
// clean up.
pRenderTarget->Release();
pDestTarget->Release();
}
Я попытался включить нужные файлы. Однако не все из них могут быть включены (например, #include <D3dx9tex.h>
).
Может ли кто-нибудь предоставить рабочий пример, в котором есть все необходимое, или указать мне, какие библиотеки я должен установить.
Я использую Visual С++ 2010 Express для Windows 7 Ultimate (x64).
Edit:
Кроме того, этот код не является полным, например, что такое идентификатор Device
?!