我正在使用桌面复制 API (C++) 并创建了一个输出复制对象,并进一步查询了 ID3D11Texture2D 对象的接口(interface)。
我曾尝试使用“D3DX11SaveTextureToFile”和“DirectX::SaveWICTextureToFile”,但出现错误。我需要从该纹理中提取位图或像素缓冲区,以便将其保存为图像。我尝试使用子资源和 ID3D11DeviceContext::Map 函数来提取像素缓冲区,但它似乎是空的。但是 context->Draw() 似乎有效。
我是否可以从 texture2D 对象中提取像素缓冲区/位图/图像?
谢谢!
更新:我使用 DirectXTex 中的 CaptureTexture
函数解决了这个问题。您可以从生成的 ScratchImage
HBITMAP
最佳答案
对于那些从 DirectX::SaveWICTextureToFile
获取 E_NOINTERFACE
作为返回码的用户,您需要使用以下方法之一初始化 COM:
HRESULT hr = CoInitialize(nullptr); // Single threaded
HRESULT hr = CoInitializeEx(nullptr, COINITBASE_MULTITHREADED); // For multithreaded programs
不要忘记在完成后调用 CoUninialize()
。这是因为WIC使用COM,使用前必须先初始化。
关于c++ - 如何从 Direct3D 11 Texture2D 对象中提取位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35266134/