mfc 图片加载速度慢问题

轻描淡写Sophia 2012-02-20 11:06:45
WINCE平台开发mfc智能设备应用程序,基于对话框的工程,工程中包含多个对话框
用BMP位图做对话框背景,位图800*480像素,大小1M左右,对话框之间切换显示时,
第一次显示速度较慢,感觉图片是刷出来的,之后再显示速度就很快了。
请问这是什么原因?有什么优化方法吗?
代码如下:


OnPaint()
{
CPaintDC dc(this);
CDC memDC;
CBitmap bmBkgnd;
bmBkgnd.Attach( m_Bkgnd );

memDC.CreateCompatibleDC(&dc);
CBitmap *pOldBm = memDC.SelectObject(&bmBkgnd);

BITMAP bm;
bmBkgnd.GetObject(sizeof(bm), &bm);

dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC,0,0,SRCCOPY );
memDC.SelectObject( pOldBm );
bmBkgnd.Detach();
CDialog::OnPaint();

}


OnInitDialog()中加载图片
m_Bkgnd =::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1) );
...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
licaiyuren 2012-02-22
  • 打赏
  • 举报
回复
可以把一张大图切割成几分,如八份,然后往上贴,会提高的
轻描淡写Sophia 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zl_alen 的回复:]

建议楼主采用二级缓存去加载图片,
我也有遇到过类似的情况,加载大图确实会比较慢点。
开一个线程去加载图片到缓存,
要用的时候直接取缓存里边的数据会比较快!
[/Quote]

我现在用的这个方法不是二级缓存吗?能不能再具体讲讲,
最好能给个代码示例,谢谢啦~~
zl_Alen 2012-02-21
  • 打赏
  • 举报
回复
建议楼主采用二级缓存去加载图片,
我也有遇到过类似的情况,加载大图确实会比较慢点。
开一个线程去加载图片到缓存,
要用的时候直接取缓存里边的数据会比较快!
轻描淡写Sophia 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 woshi_ziyu 的回复:]

引用 2 楼 sophia_sz922 的回复:

引用 1 楼 91program 的回复:

图片已经加到资源,应该不会慢啊!

建议 LZ 用 GetTickCount() 测试一下究竟是哪里慢了?


bmBkgnd.Attach( m_Bkgnd );应该是执行这句话的时候很慢,
我试了下把这个操作放在OnInitDialog()里,图片显示不出来,但是对话框显示速……
[/Quote]

我把bmBkgnd定义为类成员变量了,在 OnInitDialog()里ATTACH,这样图片就显示不出来了~~
91program 2012-02-20
  • 打赏
  • 举报
回复
图片已经加到资源,应该不会慢啊!

建议 LZ 用 GetTickCount() 测试一下究竟是哪里慢了?
woshi_ziyu 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sophia_sz922 的回复:]

引用 1 楼 91program 的回复:

图片已经加到资源,应该不会慢啊!

建议 LZ 用 GetTickCount() 测试一下究竟是哪里慢了?


bmBkgnd.Attach( m_Bkgnd );应该是执行这句话的时候很慢,
我试了下把这个操作放在OnInitDialog()里,图片显示不出来,但是对话框显示速度很快。
把这个操作放回Onpaint()里就又很慢了……
[/Quote]
把bmBkgnd定义为全局 这样就不用每次ATTAVH
StarSoft_ZXB 2012-02-20
  • 打赏
  • 举报
回复
你说的是拉窗帘的感觉吧?
轻描淡写Sophia 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 91program 的回复:]

图片已经加到资源,应该不会慢啊!

建议 LZ 用 GetTickCount() 测试一下究竟是哪里慢了?
[/Quote]

bmBkgnd.Attach( m_Bkgnd );应该是执行这句话的时候很慢,
我试了下把这个操作放在OnInitDialog()里,图片显示不出来,但是对话框显示速度很快。
把这个操作放回Onpaint()里就又很慢了,图片能显示。。

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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