Qt之使用GDI实现屏幕快速抓图与缩放

Posted 草上爬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt之使用GDI实现屏幕快速抓图与缩放相关的知识,希望对你有一定的参考价值。

一.抓取和缩放

调动Qt自带的方法抓图效率很低,在实时性要求较高的场合无法满足要求,比如说抓图并转化成视频流传输来实现屏幕共享。这里采用GDI的方法来抓图,实测在抓取整个桌面(分辨率1920*1080)并等比例缩放到(1280*720)的情况下,不含鼠标耗时40毫秒左右,含鼠标50毫秒左右,基本满足要求。

下面是测试所用电脑配置:


抓取整个桌面或指定区域实际上原理是一样的,只不过桌面是个大一点的区域,在实际应用中可用用一个带边线可缩放的透明窗体来指定这个区域,如下图所示:

 

1.获取区域大小

    RECT screenShareRect;
    ::GetWindowRect((HWND)m_hwnd,&screenShareRect); 
    //透明窗体有效区域的大小和坐标
    int screenShareWidth=screenShareRect.right-screenShareRect.left-offset*2;
    int screenShareHeight=screenShareRect.bottom-screenShareRec

以上是关于Qt之使用GDI实现屏幕快速抓图与缩放的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 屏幕抓图技术的实现

OpenGL学习笔记之坐标变换学习

剪切板实现进程间持续抓图转显

C# wpf 使用GDI+实现截屏

Qt之快速生成缩略图thumbnail

你如何让背景图像快速缩放到屏幕大小?