Windows抓屏技术
前3项是主要在使用monitor capture 技术方案。是obs 的实现
文章目录
1. BitBlt (DC)
目前windows 上最通用的技术方案
1.1 调用过程
- GetDC(GetDesktokWindow() )获取桌面的DC
- 然后使用CreateDIBSection创建一个设备无关位图以及内存DC
- 使用BitBlt把桌面DC的复制到内存DC,这样通过内存DC就能直接获取到原始RGB数据。
1.2 优缺点
优点:GDI函数实现的通用做法,能在所有windows平台实现
缺点:通用归通用,截取的效率则是有点低,尤其是要达到每秒20帧以上的截取,占用CPU有点高,GDI不能获取鼠标,需要在截取的图像中把鼠标画上去。
2.DXGI
Windows8以后微软引入了一套新的接口,叫“Desktop Duplication API”,而由于Desktop Duplication API是通过Microsoft DirectX Graphics Infrastructure (DXGI)来提供桌面图像的,速度非常快。由于是通过GPU,所以cpu占用率很低,性能很高。
2.1 调用流程
- 创建D3DDevice
- 通过一系列接口获取路径,获取到IDXGIOutputDuplication接口
- 调用AcquireNextFrame,获取当前桌面数据,保存在IDXGIResource中
- 把数据从GPU映射到内存中
- 拷贝需要的数据到自己的buffer里