BitBlt函數的用法和一個小實例

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                 使用或運算組合源設備區域顏色和目標設備區域顏色

WHITENESS             使用白色填充目標區域


示例代碼片段:

HDC hdc,hdcbmp;
hdc=GetDC(hwnd);//獲取設備上下文句柄
hdcbmp=CreateCompatibleDC(hdc);
//HBITMAP hBitmap=LoadImage(hInst, MAKEINTRESOURCE(IDB_BLACK), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_SHARED);//這行代碼可代替下面三行代碼來加載圖片,具體可見CBitmap,HBITMAP,Bitmap的區別
CBitmap bmp;//定義位圖對象
bmp.LoadBitmap(IDB_BLACK);//加載位圖
HBITMAP hBitmap=(HBITMAP)bmp.GetSafeHandle();//獲取位圖指針
SelectObject(hdcbmp,hBitmap);//選中位圖對象
BitBlt(hdc, 0, 0, 40, 40, hdcbmp, 0, 0, SRCCOPY);

CBitmap,HBitmap,Bitmap區別及聯繫

參考博文:http://blog.csdn.net/ivan_ljf/article/details/8569130,並感謝原作者


【機器博弈中的用途】:把一枚棋子畫在棋盤上

一.五子棋:直接用BitBlt函數把棋子覆蓋到棋盤上

二.象棋

  (1) 把原來位置的棋子用棋盤圖案覆蓋掉(BitBlt函數);  (2) 在該位置貼上棋子的圖案,由於棋子圖案是透明的,所以要用TransparentBlt函數;  (3) 如果這枚棋子是選中的,那麼再在該位置貼上選中的圖案(再用一次TransparentBlt函數)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章