我正在修改Microsoft提供的桌面复制api示例,以捕获屏幕并将更新通过网络发送到我的应用程序。我知道如何实际发送数据;我的问题是从ID3D11Texture2D对象获取数据。
ID3D11Texture2D* m_AcquiredDesktopImage;
IDXGIResource* desktopResource = nullptr;
DXGI_OUTDUPL_FRAME_INFO FrameInfo;
// Get new frame
HRESULT hr = m_DeskDupl->AcquireNextFrame(500, &FrameInfo, &desktopResource);
// QI for IDXGIResource
hr = desktopResource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<void **>(&m_AcquiredDesktopImage));
此时,我认为屏幕更新已在m_AcquiredDesktopImage
。我需要通过有线传输此数据(尽可能高效)。
这个答案似乎是在正确的轨道上,但是我是Windows编程的新手,因此我需要一些其他帮助。
这是我可以想象的唯一解决方案 IDXGIObject::GetPrivateData
私有数据根本不是您要找的东西。它们仅在此处将自定义值附加到d3d对象。
找到ID3D11Texture2D
对象后,您需要从中读取图像,然后需要在暂存内存池中从中创建第二个对象ID3D11Device
(获取原始描述,更改池并删除绑定)。
然后,您需要使用ID3D11DeviceContext
来将纹理复制到您的暂存纹理CopyResource
。然后,您可以使用上下文Map
和Unmap
api读取图像。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句