欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解

 更新時(shí)間:2021年08月27日 08:47:20   作者:foreverhuylee  
這篇文章主要介紹了StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

StretchBlt和BitBlt都用在雙緩沖視圖中,用來顯示一幅圖像

一、StretchBlt

函數(shù)從源矩形中復(fù)制一個(gè)位圖到目標(biāo)矩形,必要時(shí)按目標(biāo)設(shè)備設(shè)置的模式進(jìn)行圖像的拉伸或壓縮。也即是將內(nèi)存中的位圖拷貝到屏幕上,并且可以根據(jù)屏幕畫圖區(qū)的大小來進(jìn)行伸縮,適應(yīng)響應(yīng)的屏幕(或圖像控件)

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

  • x:邏輯單元x軸左上角坐標(biāo); (獲取圖像控件的DC后,該值一般設(shè)為 0 ) 
  • y:邏輯單元y軸左上角坐標(biāo); (獲取圖像控件的DC后,該值一般設(shè)為 0 ) 
  • nWidth: 設(shè)備矩形寬度; (即是圖像控件的寬度,通過int rcWidth = rc.right - rc.left;來獲得,rc為保存了圖像控件矩形區(qū)坐標(biāo)信息)
  • nHeight:設(shè)備矩形高度;   (即是圖像控件的高度,通過int rcHeight = rc.bottom - rc.top;來獲得)
  • pSrcDC: 源設(shè)備上下文;   (就是我們定義的內(nèi)存DC,然后取地址)
  • xSrc :源矩形 x軸左上角坐標(biāo);   (一般都是整幅圖片拷貝,所以該值為 0 )
  • ySrc: 源矩形y 軸左上角坐標(biāo);  (一般都是整幅圖片拷貝,所以該值為 0 )
  • Specifies the x-coordinate (in logical units) of the upper-left corner of the source rectangle.
  • nSrcWidth:源矩形寬度; (如果我們定義了一個(gè)結(jié)構(gòu)體BITMAP類型m_bmp保存位圖信息,那么可以用m_bmp.bmWidth獲取寬度
  • nSrcHeight:源矩形高度  ( 如果我們定義了一個(gè)結(jié)構(gòu)體BITMAP類型m_bmp保存位圖信息,那么可以用m_bmp.bmHeight獲取寬度
  • dwRop:指定要進(jìn)行的光柵操作。 (這個(gè)有很多選擇,我們一般選擇SRCCOPY:將源矩形區(qū)域直接拷貝到目標(biāo)矩形區(qū)域。)

二、BitBlt函數(shù)

該函數(shù)對(duì)指定的源設(shè)備環(huán)境區(qū)域中的像素進(jìn)行位塊(bit_block)轉(zhuǎn)換,以傳送到目標(biāo)設(shè)備環(huán)境。

CDC::BitBlt 

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

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

  1. nSrcWidth:
  2. 源矩形寬度;
  3. nSrcHeight:源矩形高度 

前面四個(gè)參數(shù)也是和目標(biāo)矩形(也即是我們的圖像控件區(qū)域)相關(guān)的,如果是圖像控件的話,起點(diǎn)坐標(biāo)也是(0,0),終點(diǎn)坐標(biāo)就是矩形區(qū)的寬度和高度;

對(duì)于源矩形區(qū)域(指內(nèi)存DC中的位圖),只需要給出拷貝的起點(diǎn)即可,

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

下面一段代碼給出了這兩個(gè)函數(shù)的具體用法:

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

//定義并創(chuàng)建一個(gè)內(nèi)存設(shè)備環(huán)境
CDC  m_dcMemory;
if( !m_dcMemory.CreateCompatibleDC(pDC) )   //創(chuàng)建兼容性的DC
return;


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

CBitmap *pbmpOld = NULL;
m_dcMemory.SelectObject(&m_bitmap);         //將位圖選入臨時(shí)內(nèi)存設(shè)備環(huán)境

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

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

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

}

到此這篇關(guān)于StretchBlt函數(shù)和BitBlt函數(shù)用法案例詳解的文章就介紹到這了,更多相關(guān)StretchBlt函數(shù)和BitBlt函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言圍圈報(bào)數(shù)題目代碼實(shí)現(xiàn)

    C語言圍圈報(bào)數(shù)題目代碼實(shí)現(xiàn)

    大家好,本篇文章主要講的是C語言圍圈報(bào)數(shù)題目代碼實(shí)現(xiàn),感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++零基礎(chǔ)精通數(shù)據(jù)結(jié)構(gòu)之帶頭雙向循環(huán)鏈表

    C++零基礎(chǔ)精通數(shù)據(jù)結(jié)構(gòu)之帶頭雙向循環(huán)鏈表

    帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨(dú)存儲(chǔ)數(shù)據(jù)。實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個(gè)結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會(huì)發(fā)現(xiàn)結(jié)構(gòu)會(huì)帶來很多優(yōu)勢(shì),實(shí)現(xiàn)反而簡(jiǎn)單
    2022-03-03
  • C中實(shí)現(xiàn)矩陣乘法的一種高效的方法

    C中實(shí)現(xiàn)矩陣乘法的一種高效的方法

    本篇文章介紹了,在C中實(shí)現(xiàn)矩陣乘法的一種高效的方法。需要的朋友參考下
    2013-05-05
  • C語言進(jìn)程程序替換的實(shí)現(xiàn)詳解

    C語言進(jìn)程程序替換的實(shí)現(xiàn)詳解

    為什么要進(jìn)程替換?因?yàn)楦高M(jìn)程創(chuàng)建出來的子進(jìn)程和父進(jìn)程擁有相同的代碼段,所以,子進(jìn)程看到的代碼和父進(jìn)程是一樣的。當(dāng)我們想要讓子進(jìn)程執(zhí)行不同的程序時(shí)候,就需要讓子進(jìn)程調(diào)用進(jìn)程程序替換的接口,從而讓子進(jìn)程執(zhí)行不一樣的代碼
    2022-08-08
  • C語言實(shí)現(xiàn)牛頓迭代法解方程詳解

    C語言實(shí)現(xiàn)牛頓迭代法解方程詳解

    這篇文章主要介紹了C語言實(shí)現(xiàn)牛頓迭代法解方程詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++中nullptr 和 NULL 的區(qū)別及用法

    C++中nullptr 和 NULL 的區(qū)別及用法

    nullptr是常數(shù),nullptr_t是它的類型.在需要分別使用空指針或空指針類型的上下文中使用每一個(gè).今天通過本文給大家介紹C++ nullptr 和 NULL 的使用區(qū)別,需要的朋友參考下吧
    2021-07-07
  • C++容器vector實(shí)現(xiàn)通訊錄功能

    C++容器vector實(shí)現(xiàn)通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了C++容器vector實(shí)現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C語言超詳細(xì)i講解雙向鏈表

    C語言超詳細(xì)i講解雙向鏈表

    在實(shí)際生活中,我們用到的最多的兩種鏈表結(jié)構(gòu)就是單鏈表和雙向帶頭鏈表,上一篇已經(jīng)介紹了單鏈表的實(shí)現(xiàn)以及一些應(yīng)用,接下來我為大家詳細(xì)介紹一下雙向鏈表,以及一些鏈表oj題
    2022-05-05
  • C語言音樂播放器實(shí)例代碼

    C語言音樂播放器實(shí)例代碼

    文章給大家分享了用C語言音樂播放器的實(shí)例代碼,對(duì)此有需要的朋友參考學(xué)習(xí)下。
    2018-07-07
  • C++中對(duì)象&類的深入理解

    C++中對(duì)象&類的深入理解

    這篇文章主要給大家介紹了關(guān)于C++中對(duì)象&類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評(píng)論