BitBlt函数和StretchBlt函数的使用

本文介绍了如何使用BitBlt和StretchBlt函数将位图贴到对话框控件中,详细解释了这两个函数的参数及其功能。BitBlt用于无拉伸的位图复制,而StretchBlt则能根据目标区域尺寸拉伸或压缩位图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己写了一个DrawImg函数

/*****************************************************************
** 函数名: DrawImg
** 输入:   ***
** 输出:
** 功能描述:   将结构体中的bmp图像贴到**对话框的picture control控件中
** 全局变量:无
** 调用模块:********
** 作  者: ***
** 日  期: 01/12/2012
** 修  改: ***
** 日  期: ***
** 版本:***
****************************************************************/

贴出其中的贴图步骤:

//和控件相关的DC
CWnd* pWnd = this->GetDlgItem(IDC_STATIC);// 其中IDC_STATIC是控件的ID
CDC* pDCWnd = pWnd->GetDC();

//和内存相关的DC(显示图像的DC)
CDC dcDraw;
dcDraw.CreateCompatibleDC(pDCWnd);

CBitmap* pMyBitmap = CBitmap().FromHandle(Para->m_hBitmap);//Para为传入的结构体
CBitmap* pOldBKBitmap = dcDraw.SelectObject(pMyBitmap);

//取得picture control控件的矩形区域
CRect rc;
pWnd->GetClientRect(&rc);

//取得Para图像的矩形区域
int clientwidth,clientheight;
clientwidth = Para->m_ClientRect.Width();
clientheight = Para->m_ClientRect.Height();

pDCWnd->BitBlt(0, 0, rc.Width(), rc.Height(), &dcDraw,100, 100, SRCCOPY);

//pDCWnd->StretchBlt(0,0,rc.Width(),rc.Height(),&dcDraw,0,0,clientwidth,clientheight,SRCCOPY);

dcDraw.SelectObject(pOldBKBitmap);
dcDraw.DeleteDC();


代码大致如上所示,但是本文主旨诣在讲述对BitBlt和StretchBlt函数的理解;

BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);

其中的参数大家可以在百度上找到说明,我主要说下我的理解:

(1)其中涉及两个部分,分别是目标区域和源区域,仔细观察发现对于宽高的描述上只有一组定义

nWidth:指定源和目标矩形区域的逻辑宽度。

nHeight:指定源和目标矩形区域的逻辑高度。

(2)针对上面一条区别开始说此函数的功能,这个函数将源区域中的位图贴到目的区域,从两个区域指定的坐标开始,截图的大小取决于(1)中的nWidthnHeight,这           个函数在贴的时候对图像没有任何的拉伸或者压缩


BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nH eightSrc, DWORD dwRop);

同样,参数可以在百度上找到,一下还是个人的理解:

(1)相比较BitBlt函数可以发现,此函数的参数多了两个,目标区域和源区域都可以自定义自己想要贴图和截图的位置

(2)StretchBlt函数还有一个不同于BitBlt函数的部分就是此函数对图像进行拉伸或压缩之后可以将图像自适应显示在目标区域中(前提是源区域的大小是整个位图的大小)


以上是本人的一些理解,共勉!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值