BitBlt

該函式對指定的源裝置環境區域中的畫素進行位塊(bit_block)轉換,以傳送到目標裝置環境。

原型:

BOOL BitBlt(

HDC  hdcDest,

int  nXDest,  int  nYDest,  int  nWidth,  int  nHeight,

HDC  hdcSrc,

int  nXSrc,  int  nYSrc,

DWORD  dwRop);

引數:

hdcDest:指向目標裝置環境的控制代碼。

nXDest、nYDest:指定目標矩形區域左上角的X軸和Y軸邏輯座標

nWidth、nHeight:指定源和目標矩形區域的邏輯寬度和邏輯高度。

hdcSrc:指向源裝置環境的控制代碼。

nXSrc、nYSrc:指定源矩形區域左上角的X軸和Y軸邏輯座標。

dwRop:指定光柵操作程式碼。這些程式碼將定義源矩形區域的顏色資料,如何與目標矩形區域的顏色資料組合以完成最後的顏色。下面列出了一些常見的光柵操作程式碼:

描述

BLACKNESS

表示使用與物理調色盤的索引0相關的色彩來填充目標矩形區域,(對預設的物理調色盤而言,該顏色為黑色)。

DSTINVERT

表示使目標矩形區域顏色取反。

MERGECOPY 

表示使用布林型AND(與)操作符將源矩形區域的顏色與特定模式組合一起。

MERGEPAINT

通過使用布林型OR(或)操作符將源矩形區域的顏色取反後與目標矩形區域的顏色合併。

NOTSRCCOPY

將源矩形區域顏色取反,拷貝到目標矩形區域。

NOTSRCERASE

使用布林型別的OR(或)操作符組合源和目標矩形區域的顏色值,然後將合成的顏色取反。

PATCOPY

將特定的模式拷貝到目標點陣圖上。

PATINVERT

通過使用布林型XOR(異或)操作符將源和目標矩形區域內的顏色合併。

PATPAINT

通過使用布林型OR(或)操作符將源矩形區域取反後的顏色值與特定模式的顏色合併。然後使用OR(或)操作符將該操作的結果與目標矩形區域內的顏色合併。

SRCAND

通過使用布林型AND(與)操作符來將源和目標矩形區域內的顏色合併。

SRCCOPY

將源矩形區域直接拷貝到目標矩形區域。

SRCERASE

通過使用布林型AND(與)操作符將目標矩形區域顏色取反後與源矩形區域的顏色值合併。

SRCINVERT

通過使用布林型XOR(異或)操作符將源和目標矩形區域的顏色合併。

SRCPAINT

通過使用布林型OR(或)操作符將源和目標矩形區域的顏色合併。

WHITENESS

使用與物理調色盤中索引1有關的顏色填充目標矩形區域。(對於預設物理調色盤來說,這個顏色就是白色)。

完整的光柵操作(ROP)碼,參見 Ternary Raster Operations.

返回值:

如果函式成功,那麼返回值非零;如果函式失敗,則返回值為零。呼叫GetLastError函式獲取擴充套件錯誤資訊。

說明:

如果在源裝置環境中可以實行旋轉或剪下變換,那麼函式BitBlt返回一個錯誤。

如果存在其他變換(並且目標裝置環境中匹配變換無效),那麼目標裝置環境中的矩形區域將在需要時進行拉伸、壓縮或旋轉。

如果源和目標裝置環境的顏色格式不匹配,那麼BitBlt函式將源場景的顏色格式轉換成能與目標格式匹配的格式。

當正在記錄一個增強型圖元檔案時,如果源裝置環境標識為一個增強型圖元檔案裝置環境,那麼會出現錯誤。

並不是所有的裝置都支援BitBlt函式。更多資訊,呼叫GetDeviceCaps 函式,將第二個引數賦值為RC_BITBLT來檢視裝置是否支援。(For more information, see the RC_BITBLT raster capability entry in the GetDeviceCaps function, as well as the MaskBlt and StretchBlt functions. )

如果源和目標裝置環境代表不同的裝置,那麼BitBlt函式返回錯誤。

更多關於從右到左向位塊傳輸顯示資訊(For information about blitting to displays with right-to-left orientations),參見 Creating Bitmaps

在Windows CE 1.0和1.01版中,引數dwRop只可以指定為下列值:SRCCOPY、SRCAND、SRCPAINT、SRCINVERT。在Windows CE 2.0及以後版中,引數dwRop可以是任何ROP3程式碼值。

下面是MSDN上的例子:

HBITMAP CopyBitmap( HBITMAP hbm) {
    HDC hdcSrc = CreateCompatibleDC(NULL);
    HDC hdcDst = CreateCompatibleDC(NULL);
    HBITMAP hbmOld, hbmOld2, hbmNew;
    BITMAP bm;
    GetObject(hbm, sizeof(bm), &bm);
    hbmOld = SelectObject(hdcSrc, hbm);
    hbmNew = CreateBitmap( bm.bmWidth, bm.bmHeight, bm.bmPlanes,
        bm.bmBitsPixel,
        NULL);
    hbmOld2 = SelectObject(hdcDst, hbmNew);
    BitBlt(hdcDst, 0, 0, bm.bmWidth, bm.bmHeight, hdcSrc, 0, 0, SRCCOPY);
    SelectObject(hdcSrc, hbmOld);
    SelectObject(hdcDst, hbmOld2);
    DeleteDC(hdcSrc);
    DeleteDC(hdcDst);
    return hbmNew;