是否可以在 D3D11 中截屏 DirectX 应用程序(例如游戏)?
我可以在 DirectX 9 或 API Hook (IDXGISwapChain::Present) 中轻松完成,但在 DirectX 11 中则不可能。
我初始化 D3D11 并使用游戏窗口 (FindWindow()) 创建交换链, 然后我得到 BackBuffer,
然后 ID3D11Texture2D::GetDesc() 使用它 ID3D11Device::CreateTexture2D(), 然后 ID3D11DeviceContext::CopyResource() 这给了我一个新的 ID3D11Texture2D 资源。
当我用 D3DX11SaveTextureToFile() 等常用方法保存它时,我总是得到一个黑色图像。
我忘记了什么?
谢谢。
最佳答案
我认为这里有两个步骤来检查你的代码:
ID3D11DeviceContext::CopyResource() 是否按预期工作?正如我们所知,这个函数要求 src 和 des 的 desc 严格相同,是 src tex 与 des tex 有一些不同的 desc。保存前可以直接输出到窗口进行检查。
D3DX11SaveTextureToFile 已弃用,取而代之的是 SaveToXXXFile(其中 XXX 是 WIC、DDS 或 TGA;WIC 不支持 DDS 和 TGA;D3DX 9 支持 TGA 作为游戏的通用艺术源格式)。 DirectXTex 和 DirectXTK 库是新的。但如果您配置适当,它现在仍然有效。检查这个函数的返回值。确保你知道如何使用
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/