【问题标题】:DirectX Screenshot Not Working?DirectX 屏幕截图不起作用?
【发布时间】:2016-09-12 11:35:35
【问题描述】:

我尝试使用 DirectX 截取屏幕截图,然后将其保存到文件中。 但是当下面的代码执行时,我得到一个完全黑色的 .png 大小(宽度/高度)作为目标 DirectX 应用程序。我做错了什么?

HRESULT hr = S_OK;

ID3D11Texture2D* pBuffer;
ID3D11Texture2D* pBackBufferStaging = NULL;

pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBuffer);

D3D11_TEXTURE2D_DESC td;
pBuffer->GetDesc(&td);
td.Usage = D3D11_USAGE_STAGING;
td.BindFlags = 0;
td.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
td.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
td.MiscFlags &= D3D11_RESOURCE_MISC_TEXTURECUBE;

pDevice->CreateTexture2D(&td, NULL, &pBackBufferStaging);
pContext->CopyResource(pBackBufferStaging, pBuffer);

D3DX11SaveTextureToFile(pContext, pBackBufferStaging, D3DX11_IFF_PNG, L"D:\\screen.png");

pBackBufferStaging->Release();
pBuffer->Release();

pSwapChain 是指向 IDXGISwapChain 的指针,pDevice 是指向 ID3D11Device 的指针,pContext 是指向 ID3D11DeviceContext 的指针。它们都设置正确,但生成的屏幕截图仍然是黑色的。

更新 #1

错误检查没有显示任何内容。所有功能均已成功执行。在 DirectX 11“Hello world”中,一切正常。我究竟做错了什么?我正在尝试截屏坦克世界游戏。

更新 #2

在 DirectX 9 上,我的方法运行良好 - Heartstone 生成有效的屏幕截图。

【问题讨论】:

  • 错误检查不是可选的。
  • @HansPassant 问题与此无关。正如我所说,他们被正确地迷住了。所以问题是这里出了什么问题
  • 嗯,你没有错误检查,这正是你不知道哪里出了问题的原因。
  • @VioletGiraffe 好的,通过错误检查,没有发生错误但屏幕截图仍然是黑色的。
  • WoT 游戏?某些 DRM 保护可能会妨碍您 - 仅使用打印屏幕时的行为是否相同?

标签: c++ directx directx-11


【解决方案1】:

尝试将以下纹理描述传递给 CreateTexture2D:

D3D11_TEXTURE2D_DESC td;
pBuffer->GetDesc( &td);
td.BindFlags = 0;
td.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
td.Usage = D3D11_USAGE_STAGING;

不要设置 td.Format 和 td.MiscFlags。

【讨论】:

    【解决方案2】:

    您是要获取您自己的应用程序或桌面的屏幕截图吗? 如果它是另一个应用程序,你是如何获得它的交换链的? 如果您使用的是 Windows 8+,您可以使用Desktop Duplication API获取桌面截图

    顺便说一句,您可以在创建设备(D3D11CreateDevice 或 D3D11CreateDeviceAndSwapChain)时传递标志 D3D11_CREATE_DEVICE_DEBUG,然后检查调试输出。它可能会给你一些重要的线索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2011-10-10
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      相关资源
      最近更新 更多