1. 程式人生 > >CImage下的雙快取

CImage下的雙快取

網上關於CImage的資料真是少……因為專案的原因,需要用到CImage類,但是影象重新整理很頻繁,導致閃屏很嚴重,有查不著相關的資料,真是糾結了很久。不過最後還是解決了^_^ ^_^ ^_^ 

不管利用的是什麼類,什麼工具,雙快取的思想是一致的:首先建立一個記憶體DC,記為MemDC;接著將我們的所有的繪圖操作都畫到MemDC中;最後利用BitBlt或者StretchBlt將MemDC中的內容一次性的拷貝繪製到目標DC上,即我們看到的客戶端上。多說無益,上程式碼:

CWnd *pWnd = GetDlgItem(IDC_IMG_SHOW);
	CClientDC dc(pWnd);
	CRect rectBig;
	pWnd->GetClientRect(rectBig);

	CBitmap bitmap;//一定要有畫布,沒有畫布玩不轉的
	CDC MemDC;
	bitmap.CreateCompatibleBitmap(&dc, rectBig.Width(), rectBig.Height());
	MemDC.CreateCompatibleDC(&dc);
	MemDC.SelectObject(&bitmap);//選擇畫布
	MemDC.SetStretchBltMode(HALFTONE);//設定拉伸模式
	MemDC.FillSolidRect(rectBig, RGB(0, 0, 0));//背景色

	m_imgData.Draw(MemDC.m_hDC, rect);//m_imgData是CImage物件,rect表示繪圖的位置
dc.StretchBlt(rectBig.left, rectBig.top, rectBig.Width(), rectBig.Height(), &MemDC, rectBig.left, rectBig.top, rectBig.Width(), rectBig.Height(), SRCCOPY);

就是這樣啦,其實很簡單。