BitBlt 截屏时出现的问题

dzz10 2012-05-15 09:13:00
执行OnBnClickedButton1一次要花1000~1100MS之间,如果去掉GetDesktopBitmapBuff函数中的BitBlt执行结果在70~80之间,请问这个BitBlt是有多慢?

我的分辨率1366*768
配置:
CPU 英特尔 奔腾 双核 E6500 2.93GHz
主板 LENOVO - 英特尔 G41 (Eaglelake) + ICH7
内存 Micron Tech. 2G DDR3 SDRAM 1066 MHz 单通道
显卡 ATI Radeon HD 5450/5470/5490/5530/6230/6250/6290 (CEDAR PRO)
主硬盘 希捷 500GB

有什么办法可以让GetDesktopBitmapBuff执行更快???
我试过很多了,几乎都是在1000+

额。。。。CSDN只让我发20~37分的帖子。。。。。。



int CDesktopGDI::GetDesktopBitmapBuff( void* pBuff )
{
HDC hDeskDc = GetDC(NULL);

BitBlt(m_MemoryDC.m_hDC, 0, 0, m_bmStruct.bmWidth, m_bmStruct.bmHeight, hDeskDc, 0, 0, SRCCOPY);
m_MemoryBitmap.GetBitmapBits(m_iBitNum, pBuff);

ReleaseDC(NULL, hDeskDc);
return m_iBitNum;
}

void CtestDlg::OnBnClickedButton1()
{
BITMAP bm;
GetDesktopWindow()->GetDC()->GetCurrentBitmap()->GetBitmap(&bm);
byte *pBuff = new byte[bm.bmWidthBytes * bm.bmHeight];

CDesktopGDI dg(bm);
clock_t te,ts;
ts=clock();

for(int i = 0; i < 30; i++)
{
dg.GetDesktopBitmapBuff(pBuff);
}

te=clock();
CString str;
str.Format(_T("%d"), te - ts);
MessageBox(str);

delete[]pBuff;
}


...全文
196 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2012-05-18
  • 打赏
  • 举报
回复
去掉m_MemoryBitmap.GetBitmapBits(m_iBitNum, pBuff);
匹夫 2012-05-18
  • 打赏
  • 举报
回复
我试过的bltbit截取桌面平均小于你40ms 换个意思就是说可以当视频流截取。我用的是台式机
Lactoferrin 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

to Lactoferrin

您好,我是要把图片的信息发送到客户端,所以必须GetBitmapBits
[/Quote]
用CreateDIBSection,这样可以省掉GetBitmapBits
匹夫 2012-05-18
  • 打赏
  • 举报
回复
40ms还不行吗?40ms是我保守的一个估计。我不喜欢用mfc,所以用的是win32对应的bitblt和getdibs
ddraw麻烦一点,也可以做到这个事情,速度快的不多
dzz10 2012-05-18
  • 打赏
  • 举报
回复
to himulakensin
您好,我的也在40MS左右,我就是希望能够再快点,不知道您有更好的方法吗?
dzz10 2012-05-18
  • 打赏
  • 举报
回复
to Lactoferrin

您好,我是要把图片的信息发送到客户端,所以必须GetBitmapBits

19,469

社区成员

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

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