mfc程序1分钟只能截图10张左右?

d294136138 2013-08-19 06:28:09
今天无聊在那里尝试1s钟电脑能截多少张图,结果发现只能截图10张。有点好奇屏幕录像软件录个25帧每秒的视频那是怎么做到的呢?
...全文
377 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
encoderlee 2013-12-01
  • 打赏
  • 举报
回复
使用GDI截图始终有那么些瓶颈,就算优化一下代码也很难有较大提升。 所以一般屏幕录像软件都不是用GDI截获的。 一般屏幕录像有2种思路 1.开发专门的虚拟驱动来获取屏幕显示进行录制和回显 2.hook核心系统显示调用接口来进行录制和回显
lm_whales 2013-12-01
  • 打赏
  • 举报
回复
GetTickCount计时精度是非常有问题的,除非耗时操作(至少s 级别的),不要用GetTickCount计时。
lm_whales 2013-12-01
  • 打赏
  • 举报
回复
BitBlt做 100 遍,看花多少时间。
mjh1021 2013-08-21
  • 打赏
  • 举报
回复
截图有没有压缩?不压的话直接写bmp么?
d294136138 2013-08-21
  • 打赏
  • 举报
回复
我发现主要是CBitmap*pOld=tdc.SelectObject(&bm);这句导致bitblt会花掉很多时间,要是没有那句bitblt在10ms以内
d294136138 2013-08-21
  • 打赏
  • 举报
回复
引用 10 楼 xuddk727 的回复:
引用 5 楼 d294136138 的回复:
[quote=引用 1 楼 xuddk727 的回复:] 1秒截10张只能证明你写的有问题。其限制主要在IO读写,但也绝不应该只有10张
我是照网上那样把屏幕画到一个兼容的dc上面再获取位图,在写位图的。bitblt需要100ms ,write需要30ms,请问你是怎么做的呢?
bitblt 100ms?你屏幕分辨率多大?什么操作系统?[/quote] 1280*1024 xp。你们的电脑上bitblt一个1280*1024的区域需要多久呢
许文君 2013-08-21
  • 打赏
  • 举报
回复
引用 5 楼 d294136138 的回复:
引用 1 楼 xuddk727 的回复:
1秒截10张只能证明你写的有问题。其限制主要在IO读写,但也绝不应该只有10张
我是照网上那样把屏幕画到一个兼容的dc上面再获取位图,在写位图的。bitblt需要100ms ,write需要30ms,请问你是怎么做的呢?
bitblt 100ms?你屏幕分辨率多大?什么操作系统?
d294136138 2013-08-21
  • 打赏
  • 举报
回复
引用 8 楼 mjh1021 的回复:
要不你测下你的时间耗在哪?可能IO卡住了,太大。可以试下另开个线程压成jpeg再保存试试。
时间都花在bitblt那个api上了
mjh1021 2013-08-21
  • 打赏
  • 举报
回复
要不你测下你的时间耗在哪?可能IO卡住了,太大。可以试下另开个线程压成jpeg再保存试试。
d294136138 2013-08-21
  • 打赏
  • 举报
回复
引用 3 楼 mjh1021 的回复:
截图有没有压缩?不压的话直接写bmp么?
没压缩,就按的网上那样bitblt到兼容dc在获取位图数据写文件。
d294136138 2013-08-21
  • 打赏
  • 举报
回复
引用 2 楼 smwhotjay 的回复:
10张真的太低了.我截到保存.也才大概20-40ms
请问你用的那个api呢,还有你截图的大小是多大的呢,我的整个屏幕截屏。
d294136138 2013-08-21
  • 打赏
  • 举报
回复
引用 1 楼 xuddk727 的回复:
1秒截10张只能证明你写的有问题。其限制主要在IO读写,但也绝不应该只有10张
我是照网上那样把屏幕画到一个兼容的dc上面再获取位图,在写位图的。bitblt需要100ms ,write需要30ms,请问你是怎么做的呢?
cjfdqchwhj 2013-08-21
  • 打赏
  • 举报
回复
坐个沙发学习一下
d294136138 2013-08-21
  • 打赏
  • 举报
回复
引用 14 楼 xuddk727 的回复:
这应该是你代码的问题,我网上随意找了一段代码,截图20张共耗时700多ms,分辨率1600*900
网上代码都是一样的啊 t1=GetTickCount();  dc.CreateDC("DISPLAY",NULL,NULL,NULL); int Width=GetSystemMetrics(SM_CXSCREEN); int Height=GetSystemMetrics(SM_CYSCREEN); bm.CreateCompatibleBitmap(&dc,Width,Height); tdc.CreateCompatibleDC(&dc); CBitmap*pOld=tdc.SelectObject(&bm); tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY); t2=GetTickCount(); str.Format("bitblt time:%dms",t2-t1); AfxMessageBox(str);
许文君 2013-08-21
  • 打赏
  • 举报
回复
引用 14 楼 xuddk727 的回复:
这应该是你代码的问题,我网上随意找了一段代码,截图20张共耗时700多ms,分辨率1600*900
唔,这个结论下的太武断了,我测试了下还和其他因素有关。
许文君 2013-08-21
  • 打赏
  • 举报
回复
这应该是你代码的问题,我网上随意找了一段代码,截图20张共耗时700多ms,分辨率1600*900
BeanJoy 2013-08-21
  • 打赏
  • 举报
回复
试下模拟按PrScrn键,然后把剪切板中的内容直接保存起来。
smwhotjay 2013-08-20
  • 打赏
  • 举报
回复
10张真的太低了.我截到保存.也才大概20-40ms
许文君 2013-08-20
  • 打赏
  • 举报
回复
1秒截10张只能证明你写的有问题。其限制主要在IO读写,但也绝不应该只有10张

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧