我是靠谱客的博主 沉默柜子,最近开发中收集的这篇文章主要介绍通过DXGI实现高效抓屏,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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里
  其中,获取到IDXGIOutputDuplication接口,是通过如下路径:
IDXGIDevice --> IDXGIAdapter --> IDXGIOutput --> IDXGIOutput1 --> IDXGIOutputDuplication

关键代码
创建接口


获取一帧桌面数据


截屏性能测试
  这里把他跟传统的使用GDI截屏技术,进行对比。程序只截取桌面数据,然后把数据保存到自己的内存buffer中,不做其他操作。CPU有点差,如果是好点的cpu,性能数据应该是更好看,不过做对比还是很明显能看出来的。

CPU:i3-3120M,2.5GHZ,双核四线程
系统:Windows10
内存:8GB
  

我的笔记本比较老了,所以GDI最多只能跑到20帧了,不过可以看到,即使这种情况下,当不设置帧率,也就是无限循环截屏的情况下,DXGI的性能只能用可怕来形容。。。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

合作请联系QQ。(转载请注明作者和出处~)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--------------------- 
作者:haibindev 
来源:CSDN 
原文:https://blog.csdn.net/haibindev/article/details/84061641 
版权声明:本文为博主原创文章,转载请附上博文链接!

最后

以上就是沉默柜子为你收集整理的通过DXGI实现高效抓屏的全部内容,希望文章能够帮你解决通过DXGI实现高效抓屏所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部