91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

StretchBlt函數和BitBlt函數怎么用

發布時間:2021-08-27 11:12:56 來源:億速云 閱讀:146 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關StretchBlt函數和BitBlt函數怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

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)轉換,以傳送到目標設備環境。

CDC::BitBlt 

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

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

  1. nSrcWidth:

  2. 源矩形寬度;

  3. nSrcHeight:源矩形高度 

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

對于源矩形區域(指內存DC中的位圖),只需要給出拷貝的起點即可,

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

下面一段代碼給出了這兩個函數的具體用法:

void CEnvirMonibeta1View::ShowBitmap(CDC *pDC, CString TotalName, const RECT &rc)
{
//顯示圖片函數LoadImage  根據位圖(或圖片)的全路徑名TotalName加載圖片
HBITMAP m_hBitmap;
m_hBitmap = (HBITMAP)                                      LoadImage(NULL,TotalName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);
// 之前在類中定義了一個CBitmap 類的對象m_bitmap,
if( m_bitmap.m_hObject )
{
m_bitmap.Detach();            //m_bitmap為創建的位圖對象
}
m_bitmap.Attach(m_hBitmap);   // 讓位圖對象m_bitmap 和我們加載的位圖相關聯(加載進來的位圖只要提供一個位圖句柄就可以)

//定義并創建一個內存設備環境
CDC  m_dcMemory;
if( !m_dcMemory.CreateCompatibleDC(pDC) )   //創建兼容性的DC
return;


 //定義一個位圖結構體,將圖片信息保存在位圖結構體中
BITMAP bitmap;
m_bitmap.GetBitmap(&bitmap);           

CBitmap *pbmpOld = NULL;
m_dcMemory.SelectObject(&m_bitmap);         //將位圖選入臨時內存設備環境

//獲取屏幕畫圖區域(圖像控件)的寬度和高度
int rcWidth = rc.right - rc.left;
int rcHeight = rc.bottom - rc.top;

//圖片顯示調用函數BitBlt
pDC->BitBlt(0,0,rcWidth,rcHeight,&dcBmp,0,0,SRCCOPY);
       // 如果希望圖片和矩形區域能自動適配,可以用下面的函數
// pDC->StretchBlt(0,0,rcWidth,rcHeight,&dcBmp,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);

//下面是一些善后工作
dcBmp.SelectObject(pbmpOld);           //恢復臨時DC的位圖
DeleteObject(&m_bitmap);//刪除位圖
dcBmp.DeleteDC();//刪除后臺DC
// Invalidate();    //一直調用OnDraw顯示圖片

}

關于“StretchBlt函數和BitBlt函數怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

囊谦县| 平遥县| 奈曼旗| 淮北市| 临澧县| 法库县| 蓝田县| 雷州市| 峨山| 惠东县| 临潭县| 衡阳县| 武定县| 克什克腾旗| 尼玛县| 额济纳旗| 宁安市| 丰都县| 宜州市| 稻城县| 同心县| 米脂县| 河北省| 伽师县| 宁陕县| 潮州市| 北宁市| 科技| 雅江县| 凌云县| 阿拉善右旗| 罗城| 海口市| 库尔勒市| 新龙县| 宝应县| 彰化县| 衡南县| 得荣县| 灵寿县| 北宁市|