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 = http://www.jb51.net/article/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; }
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
Tags: 矩形 區域 顏色 目標 指定 邏輯
文章來源: