TransparentBlt、StretchBlt與BitBlt三個函式的區別

只要你在發表於2019-02-12

TransparentBlt、StretchBlt與BitBlt三個函式的區別

BOOL StretchBlt(

   int x,  //指定目的矩形區域左上角的X座標

   int y,  //指定目的矩形區域左上角的Y座標

   int nWidth,  //指定目的矩形區域的寬度

   int nHeight,  //指定目的矩形區域的高度

   CDC* pSrcDC, 

   int xSrc,  //指定源矩形區域左上角的X座標

   int ySrc,  //指定源矩形區域左上角的Y座標

   int nSrcWidth, //指定源矩形區域的寬度

   int nSrcHeight, //指定源矩形區域的高度

   DWORD dwRop   //此引數參考MSDN,SRCCOPY型別為直接拷貝

);  //此函式將一個點陣圖資源從一個矩形區域拷貝到另一個矩形區域,即縮放點陣圖 

BOOL TransparentBlt(

   int xDest,

   int yDest,

      int nDestWidth,

      int nDestHeight,

   CDC* pSrcDC,

   int xSrc,

   int ySrc,

   int nSrcWidth,

   int nSrcHeight,

   UINT clrTransparent 

);  //此函式同樣具有縮放功能,但此函式最後一個引數用來指定作為透明色的RGB;

 

BOOL BitBlt(

   int x,

   int y,

   int nWidth,

   int nHeight,

   CDC* pSrcDC,

   int xSrc,

   int ySrc,

   DWORD dwRop 

);  //此函式同樣用來拷貝點陣圖資源,但不具備縮放功能.

 

用法舉例:

CPaintDC dc(this);    CBitmap BackBMP;

BackBMP.LoadBitmapW(IDB_BITMAP1);

BITMAP bm;    BackBMP.GetBitmap(&bm);

CDC ImageDC;

ImageDC.CreateCompatibleDC(&dc);

CBitmap* pOldImageBMP = ImageDC.SelectObject(&BackBMP);

dc.StretchBlt(0, 0, bm.bmWidth+15, bm.bmHeight+15, &ImageDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); 

ImageDC.SelectObject(pOldImageBMP);

CBitmap ForeBMP;

ForeBMP.LoadBitmapW(IDB_BITMAP2);

ForeBMP.GetBitmap(&bm);

pOldImageBMP = ImageDC.SelectObject(&ForeBMP);

dc.TransparentBlt(0, 0, bm.bmWidth+15, bm.bmHeight+15, &ImageDC, 0, 0, bm.bmWidth, bm.bmHeight, RGB(255, 255, 255));

//源BitMap中的RGB(255, 255, 255)值當作透明顏色,也就是白色。

ImageDC.SelectObject(pOldImageBMP);

相關文章