截屏的超级难题,确实是没分了,大家请多见谅!
晃了好多论坛了,没一个人具体做过这个东西或是能给出一点具体的解决方案.
问题其实不麻烦
我想做的工作是:用VC做一个程序每隔十秒钟截一次屏,截获的数据要保存成文件传到服务器上去.
我遇到的问题是:
1:截屏其实并不难,可当运行到GetDIBits时,CPU占用的特别高,整个屏幕会非常的慢,由于我要截获的屏幕上大部分情况下是在播放视频,所有截屏的时候会一顿一顿的,效果非常不好,
请问哪位用过其他的什么好办法同样可以截屏却不耗费那么大资源?或是分块截屏也行,但本人水平有限,确实不会实现...
2:不知道做过截屏的朋友们遇到过没有,反正我是遇到了,就是把截下来的屏幕存成文件后,如果屏幕上此时正在放的视频,那么当你打开截下来的图片文件时,图片上的视频区域居然不是静止的,而是和屏幕上放的视频一起动!!!哪位遇到过,请多多指教这其中的原因.
[解决办法]
做过截屏的程序,不过不涉及视频流,主要是对一个电子书工具自动翻页并抓屏,大概一两秒一次吧,然后转存成JPG图片,电脑分辨率为1280*1024,CPU占用率并不高。我觉得楼主的问题出在代码里,用不着分块截屏。
即然是图片文件,又怎么会是运动的?不知道楼主是用哪个函数进行截屏的,我用的方法是直接保存屏幕DC的方法,这和键盘上print screen键的实现方式一样,用这种方法是无法对如RealPlay或MediaPlayer等常用的播放器的播放画面进行截图的,它们都采用视频流的技术,只能用DirectShow等进行截图,像常用的播放器都有自己的截图工具菜单。所以涉及到视频的截图要用DirectShow,GDI是不行的。
[解决办法]
如果是nt系统的话可以试试这样
开始-> 运行-> dxdiag-> 显示-> DirectDraw 加速(把这个禁用), 这样就可以用GDI来截图了,视频也可以正常播放。我用BitBlt做的截屏程序能成功截屏,按PrintScreen也有效。
希望有用。