是否可以在D3D11中进行DirectX应用程序(例如游戏)的屏幕截图?
我可以在DirectX 9或API挂钩(IDXGISwapChain :: Present)中轻松完成此操作,但在DirectX 11中则无法实现。
我初始化D3D11并使用“游戏”窗口(FindWindow())创建SwapChain,
然后我得到了BackBuffer,
然后
ID3D11Texture2D :: GetDesc()
用在
ID3D11Device :: CreateTexture2D(),
然后
ID3D11DeviceContext :: CopyResource()
这给了我一个新的ID3D11Texture2D资源。
当我使用D3DX11SaveTextureToFile()之类的常用方法保存它时,总是得到黑色图像。
我忘记了什么?
谢谢。
最佳答案
我认为这里分两步检查您的代码:
ID3D11DeviceContext :: CopyResource()是否按预期工作?众所周知,此函数要求src和des严格相同的desc,因为src tex与des tex有一些区别。您可以直接输出到窗口进行检查,然后再保存。
不推荐使用D3DX11SaveTextureToFile,而由SaveToXXXFile(其中XXX是WIC,DDS或TGA; WIC不支持DDS和TGA; D3DX 9支持TGA作为游戏的通用美术源格式)取代。 DirectXTex和DirectXTK库是新的。但是,如果您进行适当的配置,它现在仍然可以工作。检查此func返回值。确保您知道如何使用
HRESULT D3DX11SaveTextureToFile(
ID3D11DeviceContext *pContext,
_In_ ID3D11Resource *pSrcTexture,
_In_ D3DX11_IMAGE_FILE_FORMAT DestFormat,
_In_ LPCTSTR pDestFile
);
关于c++ - C++中的D3D11屏幕捕获,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36224525/