【发布时间】:2019-03-22 08:47:33
【问题描述】:
我正在使用桌面复制 API (C++),并创建了一个输出复制对象,并进一步查询了 ID3D11Texture2D 对象的接口。
我曾尝试使用“D3DX11SaveTextureToFile”和“DirectX::SaveWICTextureToFile”,但它给出了错误。我需要从该纹理中提取位图或像素缓冲区,以便将其保存为图像。我尝试使用子资源和 ID3D11DeviceContext::Map 函数来提取像素缓冲区,但它似乎是空的。但是 context->Draw() 似乎有效。
无论如何我可以从 texture2D 对象中提取像素缓冲区/位图/图像吗?
谢谢!
更新:我使用 DirectXTex 中的CaptureTexture 函数解决了这个问题。您可以从生成的ScratchImage 创建一个HBITMAP
【问题讨论】:
-
您遇到的 HRESULT 错误是什么?
-
@ChuckWalbourn : D3DX11SaveTextureToFile 给出“尝试创建启用了调试层但未安装该层的设备” Directx::SaveWICTextureToFile 给出“不支持此类接口”
-
D3DX11 已被弃用并且多年未更新,因此错误输出可能试图将
E_NOINTERFACE变成有意义的东西,但它不再是有意义的了。您能准确告诉我ScreenGrab.cpp或DirectXTexWIC.cpp中的哪一行代码您在哪里看到此错误生成? -
@ChuckWalbourn :
IWICImagingFactory* pWIC = _GetWIC();失败,返回为E_NOINTERFACE -
您使用的是什么操作系统?您使用的是哪个 vcxproj/sln 文件或 NuGet 版本的 DirectXTex?根据您构建代码的方式,
_GetWIC将尝试使用 WIC2,然后使用 WIC1,或者只使用 WIC1。见this post
标签: c++ windows directx screenshot direct3d11