MFC中缩放位图

缩放位图是指在显示图片的过程中个,图片的大小可根据我们的要求进行放大和缩小。
缩放位图的主要技术是,定一个变量,使其图片在使用StretchBlt函数的时候控制输出图片的宽度和高度就可以实现缩放图标的功能

例程如下:

1、首先定义一个变量

int m_ZOOmPercent;//定义一个变量,记录位图的缩放系数
CBitmap* m_bmp;//定义一个位图指针变量,用于保存加载的位图
CBitmap* m_OldBmp;//定义一个位图指针对象,用于记录使用SelectObject返回的上一个指针
CDC m_dc;//定义一个CDC对象,用于常见创建上下文对象

2、加载位图

void C位图缩放Dlg::OnTimerIdVisibilityTimer()
{
	// TODO:  在此添加命令处理程序代码
	CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,_T("*.bmp|*.bmp||"),this);//打开一个文件选择对话框
	if (dlg.DoModal() == IDOK )
	{
		HBITMAP hbitmap = (HBITMAP)LoadImage(NULL,dlg.GetPathName(),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
		//通过LoadImage函数加载指定路径的位图文件
		if (hbitmap == NULL)
		{
			AfxMessageBox(_T("没有获取到图片句柄"));
			return;
		}
		FreeObject();
		
		//m_bmp.Attach(hbitmap);//将句柄和Cbitmap关联
		m_bmp = CBitmap::FromHandle(hbitmap);//通过句柄联系CBitmap指针对象
		CDC *pDC = GetDC();//创建一个临时画图对象
		m_dc.CreateCompatibleDC(pDC);//使用零时话图对象产生与pDC指定设备兼容的设备上下文内存
		ReleaseDC(pDC);
		m_OldBmp = m_dc.SelectObject(m_bmp);//将加载的位图对象对象选入设备上下文中
		Invalidate(FALSE);
	}
}

3、显示位图

if (m_dc.GetSafeHdc() == NULL)//判断上下文对象是不是为空
		{
			CDialogEx::OnPaint();
		}
		else
		{
			CPaintDC dc(this);//创建绘制的设备上下文
			CRect rect;
			GetClientRect(&rect);
			::FillRect(dc.GetSafeHdc(),rect,(HBRUSH)GetStockObject(WHITE_BRUSH));//设置背景色
			BITMAP bm;
			m_bmp->GetBitmap(&bm);
			dc.StretchBlt( //将m_dc中包含的图片信息,绘制到窗口上
				0,0,
				bm.bmWidth*m_ZOOmPercent/100,//这里调节显示图片的大小
				bm.bmHeight*m_ZOOmPercent / 100,//这里调节显示图片的大小
				&m_dc,
				0,0,
				bm.bmWidth,
				bm.bmHeight,
				SRCCOPY
				);
		}
			
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页