StretchBlt函式和BitBlt函式的區別和用法

ST工作室發表於2018-09-06

StretchBlt和BitBlt都用用來顯示一幅影像

一、StretchBlt

函式從源矩形中複製一個點陣圖到目標矩形,必要時按目標裝置設定的模式進行影像的拉伸或壓縮。也即是將記憶體中的點陣圖拷貝到螢幕上,並且可以根據螢幕畫圖區的大小來進行伸縮,適應響應的螢幕(或影像控制元件)

BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );
x:邏輯單元x軸左上角座標; (獲取影像控制元件的DC後,該值一般設為 0 ) 
y:邏輯單元y軸左上角座標; (獲取影像控制元件的DC後,該值一般設為 0 ) 
nWidth: 裝置矩形寬度;(即是影像控制元件的寬度,通過int rcWidth = rc.right - rc.left;來獲得,rc為儲存了影像控制元件矩形區座標資訊)
nHeight:裝置矩形高度;  (即是影像控制元件的高度,通過int rcHeight = rc.bottom - rc.top;來獲得)
pSrcDC: 源裝置上下文;   (就是我們定義的記憶體DC,然後取地址)
xSrc :源矩形x軸左上角座標;   (一般都是整幅圖片拷貝,所以該值為 0 )
ySrc: 源矩形y軸左上角座標;  (一般都是整幅圖片拷貝,所以該值為 0 )
Specifies the x-coordinate (in logical units) of the upper-left corner of the source rectangle.
nSrcWidth:源矩形寬度;(如果我們定義了一個結構體BITMAP型別m_bmp儲存點陣圖資訊,那麼可以用m_bmp.bmWidth獲取寬度)
nSrcHeight:源矩形高度 ( 如果我們定義了一個結構體BITMAP型別m_bmp儲存點陣圖資訊,那麼可以用m_bmp.bmHeight獲取寬度)
dwRop:指定要進行的光柵操作。(這個有很多選擇,我們一般選擇SRCCOPY:將源矩形區域直接拷貝到目標矩形區域。)
二、BitBlt函式

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

BitBlt 
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

BitBlt函式和上面的STretchBlt函式的引數基本上差不多,只是少了倒數第二個和倒數第三個引數:

nSrcWidth:源矩形寬度; 以及,nSrcHeight:源矩形高度 

前面四個引數也是和目標矩形(也即是我們的影像控制元件區域)相關的,如果是影像控制元件的話,起點座標也是(0,0),終點座標就是矩形區的寬度和高度;

對於源矩形區域(指記憶體DC中的點陣圖),只需要給出拷貝的起點即可,

BitBlt函式不會對原來的點陣圖進行拉伸或壓縮,只會根據我們給定的nWidth,nHeight 值來決定該有多少部分進行顯示

 

相關文章