前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >windows平台桌面截屏技术介绍

windows平台桌面截屏技术介绍

作者头像
lcyw
发布于 2022-06-10 11:34:46
发布于 2022-06-10 11:34:46
1.8K0
举报
文章被收录于专栏:machh的专栏machh的专栏

windows系统中,抓取屏幕有很多方法,比较常用的是GDI和mirror两种方式,除此以外,利用ddraw和DXGI(windows7以上系统支持)方式也可以抓取屏幕。由于mirror的方式涉及到驱动底层,并且也不是所有系统都支持,这里不做介绍,着重介绍GDI, DDRAW和DXGI这三种抓屏方式,

一,GDI

所有的windows版本都通用的抓屏方式,这种抓屏方式相对比较慢,抓取一帧1080p的桌面需要5~8ms左右的时间。而且在vista以后的系统上,如果启用Aero特效的话,效率较低。

缺点:效率较差。

HDC window_dc = ::GetDC(::GetDesktopWindow()); winWidth_ = GetDeviceCaps(window_dc, HORZRES); winHeight_ = GetDeviceCaps(window_dc, VERTRES); hTemp_ = CreateCompatibleDC(window_dc); memBitmap_ = CreateCompatibleBitmap(window_dc, winWidth_, winHeight_); oldmemBitmap_ = (HBITMAP)SelectObject(hTemp_, memBitmap_); int rgbSize = 4 * winWidth_ * winHeight_; bih_.biBitCount = 32; bih_.biCompression = BI_RGB; bih_.biHeight = -winHeight_; bih_.biPlanes = 1; bih_.biSize = sizeof(BITMAPINFOHEADER); bih_.biSizeImage = rgbSize; bih_.biWidth = winWidth_; BitBlt(hTemp_, 0, 0, winWidth_, winHeight_, window_dc, 0, 0, SRCCOPY | CAPTUREBLT); GetDIBits(hTemp_, memBitmap_, 0, winHeight_, rgbPtr_, (LPBITMAPINFO)&bih_, DIB_RGB_COLORS ); DeleteDC(hTemp_); ::ReleaseDC(::GetDesktopWindow(), window_dc); DeleteObject(memBitmap_);

二,DirectX

使用DDraw,D3d 均可实现桌面抓屏, 效率都不错, 前提是要安装directX 框架,支持XP及以上操作系统。

缺点:也和GDI一样,如果启用了特效,速度也非常慢。

三, DXGI

这种抓屏方式,速度非常快,而且即使启用了Aero特效,抓屏效率也一样。尤其在windows10以后的系统上,当桌面没有变化时,你是抓取不到任何图像的,只有在桌面有变化时,你才能抓取到图像。这会带来更高的抓屏效率和更少的系统开销。当然,它也不是完美的,它只能在vista以上的系统上才可以使用,老旧的xp是不支持这种新技术的。

缺点:但是只适用于win8及以后的操作系统,win7以前的系统无法使用此接口,不支持抓局部屏,只能是全屏。只能使用vs2012以上的IDE才可以编译。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 音视频开发训练营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
DXGI快速截屏桌面直播技术
  很多地方都需要用到截屏/录屏技术,比如桌面直播,桌面录制等等。在微软Windows平台,有很多截屏的接口,不过大多数性能并不理想,Windows8以后微软引入了一套新的接口,叫“Desktop Duplication API”,应用程序,可以通过这套API访问桌面数据。而由于Desktop Duplication API是通过Microsoft DirectX Graphics Infrastructure (DXGI)来提供桌面图像的,速度非常快。由于是通过GPU,所以cpu占用率很低,性能很高。
hbstream
2018/05/11
4K0
DXGI快速截屏桌面直播技术
win7下虚拟显示器完成记(virtual monitor)——VDI显卡透传场景「建议收藏」
本次使用wddm过滤驱动的应用场景是VDI GPU透传场景,我这边运用WDDM过滤驱动,也有人叫wddm hook,主要有如下功能:
全栈程序员站长
2022/09/24
4.8K0
win7下虚拟显示器完成记(virtual monitor)——VDI显卡透传场景「建议收藏」
.NET 封装的Windows平台轻量DirectUI框架
给大家推荐一个.NET 封装的Windows平台轻量DirectUI框架ExDUIR.NET。
用户9127601
2024/02/21
1790
.NET 封装的Windows平台轻量DirectUI框架
Windows 下的高 DPI 应用开发(UWP / WPF / Windows Forms / Win32)
本文将介绍 Windows 系统中高 DPI 开发的基础知识。由于涉及到坐标转换,这种转换经常发生在计算的不知不觉中;所以无论你使用哪种 Windows 下的 UI 框架进行开发,你都需要了解这些内容,以免不断踩坑。
walterlv
2023/10/22
1K0
Windows 下的高 DPI 应用开发(UWP / WPF / Windows Forms / Win32)
Windows下ImGui的快速使用介绍至项目建立(VS,DX11)
本文建立在基于DX11下API的ImGui使用,如果是别的图形API我还未尝试,故其他API相关请参考阅读,并不一定适用
晨星成焰
2024/06/20
1.9K0
Windows下ImGui的快速使用介绍至项目建立(VS,DX11)
浅谈window桌面GUI技术及图像渲染性能测试实践
从Windows Vista之后,desktop composition的部分就由Desktop Window Manager完成了(当然是启用Aero的情况下,Windows 8起DWM是必须开启的)
高楼Zee
2019/07/17
4K0
浅谈window桌面GUI技术及图像渲染性能测试实践
Windows平台RTMP|RTSP播放器为什么要兼容GDI绘制
先说结论,Windows平台播放渲染这块,一般来说99%以上的机器都是支持D3D的,实现GDI模式绘制,除了为了好的兼容性外,在远程连接的场景下,D3D创建不成功,需要使用GDI模式。
音视频牛哥
2021/05/13
6050
分享一个在 dotnet 里使用 D2D 配合 AOT 开发小而美的应用开发经验
本文将分享我在 dotnet 里面使用 Direct2D 配合 AOT 开发一个简单的测试应用的经验。这是我用不到 370 行代码,从零开始控制台创建 Win32 窗口,再挂上交换链,在窗口上使用 D2D 绘制界面内容,最后使用 AOT 方式发布的测试应用。成品文件体积不超过 10MB 且运行内存稳定在 60MB 以内,满帧率运行但 CPU 近乎不动
林德熙
2024/02/19
1500
UWP 和 WPF 对比
本文告诉大家 UWP 和 WPF 的不同。 如果在遇到技术选择或者想和小伙伴吹的时候可以让他以为自己很厉害,那么请继续看。
林德熙
2018/09/18
14.9K2
.NET 封装的Windows平台轻量DirectUI框架
给大家推荐一个.NET 封装的Windows平台轻量DirectUI框架ExDUIR.NET。
郑子铭
2023/09/19
4430
.NET 封装的Windows平台轻量DirectUI框架
Windows平台RTMP/RTSP直播推送模块设计和使用说明
好多开发者一直反馈,Windows平台,做个推屏或者推摄像头,推RTMP或者RTSP出去,不知道哪些功能是必须的,哪些设计是可有可无的,还有就是,不知道如何选技术方案,以下是基于我们设计的Windows平台RTSP、RTMP直播推送模块,设计和使用说明,供大家参考。
音视频牛哥
2020/03/02
3K0
createfont函数_windows程序设计基于.net平台
cHeight是字体的高度。 cWidth是字体的宽度。 cEscapement是字体的倾斜角。 cOrientation是字体的倾斜角。 cWeight是字体的粗细。 bItalic是字体是否斜体。
全栈程序员站长
2022/09/23
4330
通过 Windows 用户模式回调实施的内核攻击
这篇文章翻译自一篇多年之前的论文,原文作者是 Tarjei Mandt。原文系统地描述了 win32k 的用户模式回调机制以及相关的原理和思想,可以作为学习 win32k 漏洞挖掘的典范。早前曾经研读过,近期又翻出来整理了一下翻译,在这里发出来做个记录。原文链接在文后可见。
稻草小刀
2022/12/12
1.7K0
通过 Windows 用户模式回调实施的内核攻击
[Android] 使用MediaProjection截屏
Android5.0以上提供了MediaProjection,方便截屏录屏等功能。
wOw
2018/09/18
11.3K0
Windows平台音频采集技术介绍
在Windows操作系统上,音频处理技术主要是采用微软提供的相关API:Wave系列API函数、DirectSound、Core Audio。
lcyw
2022/06/10
1.6K0
浅谈 Windows 桌面端触摸架构演进
我在和小伙伴水触摸相关的坑,说到了上古的触摸,很难和小伙伴统一知识,于是就写了本文用于告诉大家,桌面端的触摸架构是如何一步步演进的
林德熙
2019/12/02
1.2K0
浅谈 Windows 桌面端触摸架构演进
Windows下木马的常用功能
《Python黑帽子:黑客与渗透测试编程之道》的读书笔记,会包括书中源码,并自己将其中一些改写成Python3版本。书是比较老了,anyway,还是本很好的书
红客突击队
2022/09/29
4730
C++屏幕截图 图片转JPEG
C#实现同屏的时候,频繁截屏内存并不能很好的释放,所以就打算用C++实现这部分的功能。
码客说
2021/07/13
2.4K1
Windows Server 2008 R2 到Windows 7的改造之路
与windows 7相比,windows server 2008 r2功能更为全面,开发人员也更喜欢使用win server 2008 r2进行开发。
williamwong
2018/07/24
1.9K0
Windows Server 2008 R2 到Windows 7的改造之路
SkeyePlayer渲染引擎D3DRender电子放大功能实现解决方案(附源码) (1)
SkeyePlayer依靠D3DRender强大的渲染能力我们可以实现很多视频编辑功能,比如电子放大功能,本文将深入D3DRender渲染引擎库代码,重点讲述其如何采用surface离屏表面技术来实现渲染视频图像呈现,以实现在surface上做电子放大缩略图显示等功能。
Openskeye
2023/04/20
3170
推荐阅读
相关推荐
DXGI快速截屏桌面直播技术
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档