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实现高效抓屏相关推荐

  1. Windows 10 下的高效抓屏方法

    概述   很多软件都需要屏幕捕捉功能,在软件中实现屏幕捕捉也不是难事,在微软Windows平台,有很多截屏的方法,例如:BitBlt.Mirror driver. GDI hook.DirectX.D ...

  2. windows远程桌面实现之一 (抓屏技术总览 MirrorDriver,DXGI,GDI)

    https://blog.csdn.net/fanxiushu/article/details/73269286 by fanxiushu 2017-06-14     转载或引用请注明原始作者 要实 ...

  3. ffmpeg快速抓屏DXGI技术,基于screen-capture-recorder抓屏的升级screen-capture-dxgi:directshow滤镜,升级为支持dxgi120帧

    文章包含资源下载地址: (136条消息) screen-capture-recorder升级dxgi版本安装包(支持120帧高帧率,低CPU占有率)资源-CSDN文库 (8条消息) screen-ca ...

  4. 如何用DXGI抓屏,并识别视频文件中的数字

    项目内容 DXGI 抓屏,设计定时器,获取数据之后回调函数,多屏 建立数字图片数据库,pytorch 训练模型 回调函数,识别数字框,存取drop位置,copy drop位置内存,存到queue 新建 ...

  5. 抓屏的各种方法(http://www.codeproject.com/KB/dialog/screencap.aspx)

    文章翻译自 P.GopalaKrishna 的 Various methods for capturing the screen 一文,原版地址见下面.本文章版权归原作者所有.     如果转载该译文 ...

  6. VC 抓屏的各种方法

    目录: 1 导言 2 用GID函数抓屏 3  用DirectX方式抓屏 4 用Windows Media API抓屏 1 导言 有时候我们需要编程抓取整个屏幕上的内容,下面我将介绍抓屏是如何实现的.典 ...

  7. java 抓屏_java抓屏代码

    一个网上找下来的 抓屏代码只需呀输入要存放的路径和名字 就可以执行,但不能为空. import java.awt.Dimension; import java.awt.Rectangle; impor ...

  8. JS应用之禁止抓屏、复制、打印

    作者:Randy 原载:JS应用之禁止抓屏.复制.打印 版权所有,转载时必须以链接形式注明作者和原始出处及本声明 JS应用之禁止抓屏.复制.打印 项目需要禁止抓屏.复制.打印的要求,复制.打印做起来可 ...

  9. linuxpython拍照_linux下python抓屏实现方法 -电脑资料

    作者:zevolo 字体:[增加 减小] 类型:转载 这篇文章主要介绍了linux下python抓屏实现方法,涉及Python操作屏幕截取的相关技巧,需要的朋友可以参考下 本文实例讲述了linux下p ...

  10. 怎么抓取屏幕截图计算机考试时间,定时抓屏快照(电脑截屏工具)V4.8 最新版

    定时抓屏快照(电脑截屏工具)是一款非常实用的电脑屏幕定时抓拍软件.想定时截取电脑屏幕?定时抓屏快照(电脑截屏工具)轻松帮助用户.马上要放假了,家长一定很担心小孩最新的上网情况,看是在电脑上玩什么,用户 ...

最新文章

  1. WebView + jQuery
  2. 全球最大的3D数据集公开了!标记好的10800张全景图
  3. oracle 相同的sql执行两次 执行计划会不一样吗,一条SQL语句,两次执行计划的差距...
  4. jstl fn:replace替换换行符
  5. MySQL基本操作——增删查改
  6. Python字典(dict )的几种遍历方式
  7. IIC总线上挂载多个从机的程序实现
  8. google reader很有用的技巧 F+F11
  9. 通过javascript改变form提交的action,实现不同的按钮向不同的action提交同一个form的数据
  10. IT人的学习方法论-4 一些重要的能力
  11. 日期格式化为yyyymmdd_Excel小技巧——如何将多行日期快速转换为数字文本
  12. 【TWVRP】基于matlab遗传算法求解带时间窗的外卖配送车辆路径规划问题【含Matlab源码 1416期】
  13. 计算机软件配置项(转),如何将表格转换配置导入另一台计算机 - 应用技巧 - 常青藤软件工作室...
  14. 趋势杀毒软件无法更新
  15. 领英怎么加群组,加群组有什么用?(LinkedIn Groups篇)
  16. pb 系统托盘实例(定时任务管理)
  17. docker自动部署脚本
  18. 男人一生的四菜一汤(转载)
  19. javascript汉字转拼音 [zt]
  20. stm32之蓝牙无线超声波测距

热门文章

  1. JS定义const常量对象
  2. vrep中视觉传感器(Vision sensor)
  3. win10怎样更改系统字体_掌阅F1系统设置及字体更改、水墨屏阅读软件、打卡必备软件...
  4. iOS网络编程---根据URL下载网络文件的方法
  5. 【常用模块】电容触摸按键模块(原理讲解、STM32实例操作)
  6. ubuntu报错 E:无法定位软件包
  7. moment.js获取一周的第一天
  8. 微服务网关——需求篇
  9. NR中关于RE、RB、CRB、PRB、VRB、REG、RBG、CCE等概念
  10. 墙裂推荐6款实用办公软件!超级好用!