抓屏方法以及技术实现

最近由于工作一直在研究抓屏,更确切的说是录制屏幕内容。现在总结一下抓屏的方法和技术。

抓屏的方法可以有如下几种:

1)GDI抓屏

2)DirectX抓屏

3)Windows Media Encoder抓屏

4)驱动级别抓屏

5)。。。

对于第一种抓屏方法,主要用设备环境(DC),通过获取当前桌面设备环境,然后通过BltBit和GetDIBits函数,将DDB(设备相关位图)转换为

DIB(设备无关位图),通过获取的屏幕象素数据。按照一定的帧率来组合成视频文件。

第二种方法是设置离屏表面,然后让主显示表面做翻转,就可以获取主屏幕的图像信息。

第三种以及后续的几种现在并没有做太多的实验去测试效果。

 

几种抓屏的优缺点:

GDI抓屏的速度还是比较快的,在I5+1G显卡+2G内存配置下,抓取一屏时间为3.5ms,但是这种方法存在一个严重的问题,就是当玩3d游戏的时候

会出现抓屏失败或者抓屏出现黑屏帧。会造成屏幕的闪烁。也就是对图像加速时,抓屏效果非常不理想。进行directshow(特别是在播放电影的时候)

根本抓不到电影播放的内容。 

DirectX抓屏的速度不及GDI,GDI只需要将配置提升,抓屏效率明显提升,尤其是添加独立显卡的时候。但是DirectX的速度却没有因为添加硬件而

有太多的提升。

Windows Media Encoder抓屏的时候抓取游戏的时候也会出现一些问题。游戏不能全屏抓取。现在还在寻找其原因。

 

下一步策略:

当前需要一个高效的抓屏方法,1,2,3方法都在尝试,但是1,2不是很理想,需要对3进行验证,以及后续的4,或者5来提高效率,并且要求对游戏有很好的

兼容性。 

考虑修改驱动进行直接的显卡获取数据的方法。

现在网上的资料主要是针对vnc的驱动级抓屏方法,好像效果比较好,但是并没有真正的测试过。至于Mirror Driver方法就需要以后的验证了。

 

各位楼主,不知道那位在抓屏上有更好的方法,可否提出来大家一起共同学习一下。谢谢。。。 

 

Insert mode

转载于:https://www.cnblogs.com/xingyayang/archive/2011/06/21/2085684.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值