在项目中,我们有要录制屏幕的需求,录制屏幕有多种方法,可以基于windows api的BitBlt 、ffmpeg的AVDevice、directx 和QT,本文讲解基于QT5的抓屏。QT相对于其他几种抓屏方式优势是跨平台做的比较好,接口简单,劣势相对于directx抓屏消耗大一些,但directx只能是windows。经过测试directx抓屏速度最快,其他接口速度基本一致。

在我的电脑上qt 1080P屏幕抓屏消耗60~80毫秒,720p消耗30~50,也就是说如果抓屏1080我一秒最多录制10帧。这个性能要算好,不然会造成阻塞。

  • 先获取主屏幕然后抓屏存到QPixmap

//获取主屏幕

QScreen *scr = QGuiApplication::primaryScreen();

//抓屏

QPixmap pix= scr->grabWindow(QApplication::desktop()->winId());

  • 将QPixmap转为可以直接访问rgb数据的QImage

就两行代码非常简单,抓屏后数据存放在pix中,将QPixmap转换为QImage就可以取到rgb数据了。

QImage img= pix.toImage();

uchar *date = img.bits();

  • QImage格式分析

取到截屏数据后,我们就要进行编码压缩,编码可以使用ffmpeg,需要确定取到的数据格式,可以通过img.format成员获取,我这边获取的是Format_RGB32。另外要注意QT中的图像数据不一定每个像素连续存储,每一行会以4对齐,最简单解决方案,就是要保证你图像的宽度是4的倍数。如果无法保证,可以通过 img.bytesPerLine() 获取每一行的字节数。

  • 如果想要将桌面绘制到QWidget中测试,重载paintEvent函数

void QTScreen::paintEvent(QPaintEvent *event)

{

QScreen *scr = QGuiApplication::primaryScreen();

//抓屏

QPixmap pix= scr->grabWindow(QApplication::desktop()->winId());

QImage img= pix.toImage();

QPainter p;

p.begin(this);

p.drawImage(QPoint(0, 0), qi);

p.end();

}

更多的资料也可以关注我51CTO上的视频课程

夏老师的课堂 http://edu.51cto.com/lecturer/12016059.html

C++跨平台开发和音视频技术实战主题套餐

C++实战FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和ffmpeg sdk

http://edu.51cto.com/course/10359.html

转载于:https://blog.51cto.com/xiacaojun/1951341

C++编程 使用QT5 SDK录制屏幕并显示相关推荐

  1. 汇编:采用顺序编程方法,实现在屏幕上显示大写字幕A

    运行环境:windows xp professional MASM6.15 EditPlus 第一种方法: ;采用顺序编程方法,实现屏幕上显示大写字母A..486 DATA SEGMENT USE16 ...

  2. opencv录制视频 python_Python同时录制屏幕、摄像头、声音合成视频把人像放在最终视频右下角...

    原标题:Python同时录制屏幕.摄像头.声音合成视频把人像放在最终视频右下角 封面图片:<Python程序设计实验指导书>(ISBN:9787302525790),董付国,清华大学出版社 ...

  3. Python同时录制屏幕、摄像头、声音合成视频把人像放在最终视频右下角

    之前写了个使用pillow截图和pyaudio录音最后合成视频的代码, 60行Python代码打造自己的录屏软件(附源码) 那个代码虽然避免了opencv视频和pyaudio音频同步困难的问题,但是如 ...

  4. 游戏编程之三 DirectX SDK简介

    `视频课:[免费]跨平台APP JQuery Mobile开发-1-初探移动开发-张晨光的在线视频教程-CSDN程序员研修院 第三章 DirectX  SDK简介 第一节 关于DirectX SDK ...

  5. windows录制android屏幕,如何使用Android Studio录制屏幕

    如何使用Android Studio录制屏幕 我将手机连接到Android Studio和代码. 我想记录我的手机屏幕. 我看到了这个,但是该按钮在我的Android Studio中被禁用. 我可以捕 ...

  6. iphone屏幕录制_今日应用:iPhone 不越狱也可以录制屏幕了

    vidyo 是一个 iOS 系统上录制屏幕画面的小工具,而且无需越狱即可使用. 用户只需在控制中心将 Airplay 的投射对象,选择为该应用模拟的设备即可开启录屏功能. 该应用为付费应用,售价 30 ...

  7. pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

    pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...

  8. windows7自带录制屏幕怎么用

    现在还有许多用户使用的都是windows7旗舰版系统,有时候在使用时会需要用到屏幕录制.那我们要怎么操作呢?可能对于不是太熟悉电脑的朋友来讲,会比较困难.没关系,下面小编为大家分享的就是windows ...

  9. php 如何保存录像文件,如何录制屏幕并保存下来?

    原标题:如何录制屏幕并保存下来? 像操作演示.教学视频.游戏攻略等等都是事先录制并且保存下来的 ,用屏幕录制软件录制电脑屏幕更佳,迅捷屏幕录像工具就能够录制电脑屏幕并将其以不同格式保存下来. 计算机信 ...

最新文章

  1. Java多线程中的ThreadLocal,可继承,可修改
  2. VTK:可视化算法之ExtractData
  3. 【springboot】SpringBootTest 测试时, application.properties 文件的查找顺序
  4. write up 加密:zip伪加密
  5. SQLSERVER2005的安装目录结构(下)
  6. 解决 github clone慢
  7. Delphi GDI对象之绘制文本
  8. Package.json 属性说明
  9. 自动接听电话的另一种思路(只需要root权限)
  10. 代理记账公司能够为企业客户提供哪些服务
  11. Unity VR开发教程 OpenXR+XR Interaction Toolkit 2.1.1 (一) 安装和配置
  12. C51_将按键次数写入AT24C02,再读出送LCD显示
  13. 全网最简单的方法QQ透明头像设置方法(小白教程)几分钟搞定
  14. UI设计(用户界面设计)的好处
  15. 有些MP4只有音频没有视频的解决办法
  16. AutoCAD 2007官方.NET教程(一)(C#版)
  17. 一度智信:2021电商运营教程
  18. 这是一个基于Threejs的商品VR展示系统的 VR模型展示Demo
  19. Jenkins_Docker
  20. ALTER TABLE 语句添加字段

热门文章

  1. Android 仿卡片消消除
  2. 基于MSP430G2231实现的频率计
  3. 自己动手 IBeacon 室内定位 完整体验(超详细过程)
  4. QQ好友分组添加好友(UITableView实现)
  5. 基于flask+vue的模拟股票交易系统
  6. 51单片机教程:按键的定时器消抖(有延时的程序不是好程序)
  7. 自举驱动、top开关电源、光耦拾遗
  8. 如何使用Arduino开发板连接NEO-6M GPS模块
  9. 日语学习方法✅附学习资料分享
  10. 国内外免费的建站程序汇总(收藏)