|
本帖最后由 z13228604287 于 2021-8-31 15:57 编辑
DXGI快速截屏录屏技术
概述
很多地方都需要用到截屏/录屏技术,比如桌面直播,桌面录制等等。在微软Windows平台,有很多截屏的接口,不过大多数性能并不理想,Windows8以后微软引入了一套新的接口,叫“Desktop Duplication API”,应用程序,可以通过这套API访问桌面数据。而由于Desktop Duplication API是通过Microsoft DirectX Graphics Infrastructure (DXGI)来提供桌面图像的,速度非常快。由于是通过GPU,所以cpu占用率很低,性能很高。
还有一点有意思的是,Duplication API获取到的桌面数据,不管显示模式如何设置,都永远是32位RGBA数据,其实这样方便的多了,不用考虑其他可能的情况,比如24位等。
综合来看,各方面秒杀GDI截屏技术,易用性上也比MirrorDriver技术好得多,是Windows8以后平台的截屏技术首选。
调用流程
首先,这套接口是集成在DirextX之中的,所以更大部分DirectX接口的使用方式基本一致,也就是通过D3D,各种QueryInterface,各种Enum,核心方法,是AcquireNextFrame。先简单说下流程。
创建D3DDevice
通过一系列接口获取路径,获取到IDXGIOutputDuplication接口
调用AcquireNextFrame,获取当前桌面数据,保存在IDXGIResource中
把数据从GPU映射到内存中
拷贝需要的数据到自己的buffer里
易语言实现:
变量名 | 类 型 | 静态 | 数组 | 备 注 | 句柄 | 整数型 | | | 图像 | 多维矩阵 | | | 颜色 | 标量 | | |
颜色.通道2 = 255 句柄 = 视觉_屏幕创建 ()如果真 (句柄 = 0 )返回 (1 )循环判断首 ()视觉_屏幕捕获 (图像.指针, 句柄 )视觉_放置文本Zi (图像.指针, 到文本 (帧率 ()), 50, 50, #字体_衬线_简单, 2, 颜色, 2, 8, 假)视觉_显示图像 (“小白鼠”, 图像.指针 )循环判断尾 (视觉_等待按键 (1 ) ≠ 32 )视觉_屏幕释放 (句柄 )返回 (0 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 针数 | 整数型 | | | 计时 | 整数型 | | | 针 | 整数型 | | | 局 | 整数型 | | |
针 = 针 + 1 局 = 取启动时间 ()如果真 (局 - 计时 > 1000 )针数 = 针 针 = 0 计时 = 取启动时间 ()返回 (针数)
链接:https://pan.baidu.com/s/1VSYkILerRQsoDiIhl-6eTQ
提取码:4ypk
复制这段内容后打开百度网盘手机App,操作更方便哦
|
|