06-Qt实现截取屏幕任意区域并保存为图片或视频(截屏控件)

一、效果图

在这里插入图片描述

二、窗口特点与用途

  1. 窗口背景透明,窗口中的控件并不透明。
  2. 可以使用鼠标拖动窗口位置;
  3. 可以通过拖放角任意改变窗口大小;
  4. 可以正常放置任何控件或留空;
  5. 此透明窗口用于实现截图功能或截取视频的功能;
  6. 点击例子中透明窗口里的按钮即可保存透明选取的截图到执行文件目录;
  7. 支持windows平台和MacOS平台

三、制作原理与方法

  1. 使用以下代码实现窗口透明且窗口内控件不透明
//设置无边框透明
setWindowFlags(Qt::Dialog | 
	Qt::FramelessWindowHint | 
	Qt::NoDropShadowWindowHint);
setAttribute(Qt::WA_NoSystemBackground, true);
setAttribute(Qt::WA_TranslucentBackground, true);

  1. 使用paintEvent绘制边框和移动标志
  2. 使用mousePressEvent,mouseMoveEvent, mouseReleaseEvent来检测鼠标移动和点击。从而实现移动窗口,缩放窗口。
  3. 使用如下代码实现截图功能
QScreen *screen = QGuiApplication::primaryScreen();
QPixmap p = screen->grabWindow(QApplication::desktop()->winId(),
								capture_rect.x(),
								capture_rect.y(),
								capture_rect.width(),
								capture_rect.height());
								
  1. 区域设计图
    在这里插入图片描述

四、本项目源码

五、参考文章

  • 设置了透明以后,会有严重残影
    https://www.cnblogs.com/findumars/p/6411273.html
  • Qt不带标题栏(FramelessWindowHint)的窗体移动及调整大小
    https://blog.csdn.net/luols/article/details/48733721
  • Qt实现半透明、无边框、可自由移动、不规则的窗体
    https://blog.csdn.net/qq_37385181/article/details/82894077
  • 6
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Qt是一个跨平台的C++开发框架,提供了丰富的图形、多媒体等模块,方便开发者进行图像和视频处理。下面我将介绍如何使用Qt截取视频中的任意帧。 首先,我们需要使用Qt的多媒体模块中的QMediaPlayer类来播放视频。通过设置视频源,可以将视频加载到QMediaPlayer对象中。 然后,我们可以使用QMediaPlayer类的setPosition(qint64 position)函数来设置视频播放到某一帧的位置。其中,position表示以毫秒为单位的时间,需要将其转换为对应帧的位置。可以通过获取视频的总帧数和每秒的帧率来计算得到。 当设置好帧的位置后,需要使用QMediaPlayer类的QAbstractVideoSurface *videoOutput()函数获取视频输出对象。我们可以通过继承QAbstractVideoSurface类,重写其present()函数,实现自定义的视频渲染功能。 在重写的present()函数中,我们可以获取当前帧的图像数据,以便后续的处理。可以使用QVideoFrame类的bits()函数获取当前帧的原始数据。 最后,我们可以将获取到的图像数据进行自定义处理,例如保存图片文件或在界面上显示。可以使用Qt的图像处理模块QImage类来处理图像数据。 总结起来,使用Qt截取视频任意帧的过程包括:加载视频、设置帧的位置、获取图像数据、自定义处理和显示。通过这些步骤,我们可以灵活地截取视频中的任意帧,实现所需的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值