D3D11 C ++中的屏幕截图

时间:2016-03-25 17:08:31

标签: c++ directx-11 d3dx

是否可以在D3D11中制作DirectX应用程序(例如游戏)的屏幕截图?

我可以在DirectX 9或API挂钩(IDXGISwapChain :: Present)中轻松完成,但DirectX 11无法实现。

我将D3D11初始化并使用Game窗口创建SwapChain(FindWindow()), 然后我得到BackBuffer,

然后 ID3D11Texture2D :: GetDesc() 使用它 ID3D11Device :: CreateTexture2D() 然后 ID3D11DeviceContext :: CopyResource() 这给了我一个新的ID3D11Texture2D资源。

当我用D3DX11SaveTextureToFile()等常用方法保存时,我总是得到一张黑色图像。

我忘了什么?

感谢。

1 个答案:

答案 0 :(得分:0)

我认为这是检查代码的两步:

  1. ID3D11DeviceContext :: CopyResource()是否按预期工作?我们知道,这个函数需要严格相同的src和des的desc,src tex有一些来自des tex的diff desc。您可以在保存前直接输出到窗口进行检查。

  2. 不推荐使用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
    );