我分别用VC和EVC写了相同的代码,发现在调用bitblt函数的时候调用的时间不一样,分别是15ms和180ms
其中IDB_BITMAP1为800*480的位图
代码如下:
static DWORD time,oldtime,temp;
time = ::GetTickCount();
HDC hDC = ::GetDC(m_hWnd);
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = ::LoadBitmap(AfxGetApp()->m_hInstance, (LPCTSTR)IDB_BITMAP1);
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
::BitBlt(hDC,0,0,800,480,hMemDC,0,0,SRCCOPY);
oldtime = ::GetTickCount();
temp = oldtime - time;
SelectObject(hMemDC, hOldBitmap);
DeleteObject(hBitmap);
DeleteDC(hMemDC);
DeleteDC(hDC);
CString cs;
cs.Format(_T("delay time = %d"), temp);
::AfxMessageBox(cs, MB_YESNO, 0);
注:用VC调用时,有时是0ms,有时是15ms;但用EVC调用的时候,一直都在180ms左右.
可能跟硬件有关系,因为VC调用是在PC机上调用的,EVC是在2440上调用的,但感觉180ms未免也太久了吧,请问是不是上面的代码有问题啊,有其它的办法来显示大位图图片吗?用directDraw可以吗,有范例吗?麻烦大家了!
硬件我想是主要的关系吧。你想想,如果是2G 对 200M 是十倍的关系啊。对于目前的CPU而言,ARM对显示的效果处理不好,不如X86平台的。
还有就是显卡关系,特别200M的ARM CPU还要处理图像,所以变得很慢。
恩,这个我也想过了,可是显示一副图片要180ms会不会不正常啊,不知道GPS导航是怎么做的还可以在ARM上做大数据加载和图片缩放等功能?