雙緩沖即在記憶體中建立一個與螢幕繪圖區域一緻的對象,先将圖形繪制到記憶體中的這個對象上,再一次性将這個對象上的圖形拷貝到螢幕上,這樣能大大加快繪圖的速度。
雙緩沖繪圖的步驟:
1、在記憶體中建立與畫布一緻的緩沖區
2、在緩沖區畫圖
3、将緩沖區位圖拷貝到目前畫布上
4、釋放記憶體緩沖區
雙緩沖繪圖的代碼實作(在MFC下):
void CMFCApplication1View::OnDraw(CDC* pDC)
{
CMFCApplication1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
//擷取螢幕的矩形
CRect rectClient;
GetClientRect(rectClient);
//雙緩沖繪圖的實作
CDC MDC;
MDC.CreateCompatibleDC(pDC); //建立相容的DC
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, rectClient.Width(), rectClient.Height()); //建立相容的圖檔
MDC.SelectObject(bmp);
//将圖檔畫到記憶體中
m_bmpBack.Draw(MDC, rectClient);
//将記憶體中的内容拷貝到畫布上
pDC->BitBlt(0, 0, rectClient.Width(), rectClient.Height(), &MDC, 0, 0, SRCCOPY);
ReleaseDC(pDC);
}
這是關于BitBlt的一些介紹
BOOLBitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);
x:目标矩形區域的左上角x軸坐标點。
y:目标矩形區域的左上角y軸坐标點。
nWidth:在目标裝置中繪制位圖的寬度。
nHight:在目标裝置中繪制位圖的高度。
pSrcDC:源裝置上下文對象指針。
xSrc:源裝置上下文的起點x軸坐标,函數從該起點複制位圖到目标裝置。
ySrc:源裝置上下文的起點y軸坐标,函數從該起點複制位圖到目标裝置。
dwRop:光栅操作代碼
dwRop有如下選擇:
BLACKNESS 使用黑色填充目标區域
DSTINVERT 目标矩陣區域顔色取反
MERGECOPY 使用與運算組合原裝置矩形區域的顔色和目标裝置的畫刷
MERGEPAINT 使用或運算将反向的源矩形區域的顔色和目标矩形區域的顔色合并
NOTSRCCOPY 複制源裝置區域的反色到目标裝置中
NOTSRCERASE 使用或運算組合源裝置區域與目标裝置區域的顔色,然後對結果顔色取反
PATCOPY 複制源裝置目前選中的畫刷到目标裝置
PATINVERT 使用異或運算組合目标裝置選中的畫刷和目标裝置區域的顔色
PATPAINT 通過或運算組合目标區域目前選中的畫刷和源裝置區域反轉的顔色
SRCAND 使用與運算組合源裝置和目标裝置區域的顔色
SRCCOPY 直接複制源裝置區域到目标裝置中
SRCERASE 使用與運算組合目标裝置區域的反色與源裝置區域的顔色
SRCINVERT 使用異或運算組合源裝置區域顔色和目标裝置區域顔色
SRCPAINT 使用或運算組合源裝置區域顔色和目标裝置區域顔色