BitBlt介紹

來源:互聯網
上載者:User

裝置上下文繪圖有很多種方法。例如通過建立位元影像畫刷,利用其填充一個地區來實現映像的繪製。此外,還可以使用CDC類的位元影像函數來輸出位元影像到裝置上下文中。

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             使用白色填充目的地區域

StretchBlt與BitBlt不同在於StretchBlt方法能夠延伸或收縮位元影像以適應目的地區域的大小。格式如下:

BOOLStrevhBlt(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,int xSrc,int ySrc,intnSrcWidth,int nSrcHeight,DWORD dwRop);

 

x:目標矩形地區的左上方x軸座標點。

y:目標矩形地區的左上方y軸座標點。

nWidth:在目標裝置中繪製位元影像的寬度。

nHight:在目標裝置中繪製位元影像的高度。

pSrcDC:源裝置上下文對象指標。

xSrc:源裝置上下文的起點x軸座標,函數從該起點複製位元影像到目標裝置。

ySrc:源裝置上下文的起點y軸座標,函數從該起點複製位元影像到目標裝置。

nSrcWidth;需要複製的位元影像寬度。

nSrcHeight;需要複製的位元影像高度。

dwRop:光柵作業碼。


下面是兩種方法對比程式,程式碼如下:

void CoutoutBmpView::OnDraw(CDC* pDC)

{

    
COutputBmpDoc* pDoc =GetDocument();//擷取文檔對象

    
ASSERT_VALID(pDoc);//驗證文檔對象

    
CDC memDC;//定義一個裝置上下文

    
memDC.CreateCompatibleDC(pDC);//建立相容的裝置上下文

    
CBitmap bmp;//定義位元影像對象

    
bmp.LoadBitmap(IDB_BKBITMAP);//載入位元影像

    
memDC.SelectObject(&bmp);//選中位元影像對象

    
pDC->BitBlt(30,20,180,180,&memDC,1,1,SRCCOPY);//繪製位元影像

    
//以上是利用BitBlt來繪製位元影像

    
CRect rc(30,20,210,200);//定義一個地區

    
CBrush brush(RGB(0,0,0));//定義一個黑色的畫刷

    
pDC->FrameRect(rc,&brush);//繪製矩形邊框

    
//只是用來觀察兩者區別的,繪製一個矩形框

    
rc.OffsetRect(220,0);//移動地區

//下邊是利用StretchBlt繪製的位元影像

    
BITMAP BitInfo;//定義位元影像結構

    
bmp.GetBitmap(&BitInfo);//擷取位元影像資訊

    
int x = BitInfo.bmWidth;//擷取位元影像寬度

    
int y = BitInfo.bmHeight;擷取位元影像高度

    
pDC->StretchBlt(rc.left,rc.top,rc.Width(),rc.Height(),&memDC,0,0,x,y,SRCCOPY);//繪製位元影像

    
pDC->FrameRect(rc,&brush);//繪製邊框

    
brush.DeleteObject();//釋放畫刷

    
memDC.DeleteDC();//釋放裝置上下文

    
bmp.DeleteObject();//釋放位元影像對象

}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.