gpt4 book ai didi

c++ - DirectX 屏幕截图不起作用?

转载 作者:行者123 更新时间:2023-11-28 02:01:14 25 4
gpt4 key购买 nike

我尝试使用 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 生成工作屏幕截图。

最佳答案

尝试将以下纹理描述传递给 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。

关于c++ - DirectX 屏幕截图不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39449392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com