MFC实现静态和动态显示bmp图片

MFC 专栏收录该内容
39 篇文章 1 订阅
代码下载路径:http://download.csdn.net/detail/dafenqie/9690529
1、通过LoadImage函数静态显示一个bmp文件:
  1)增加一个pictureControl控件,修改ID为:IDC_STATIC_PICTURE
  2)增加一个按钮,caption改为“静态显示图片”
  3)双击按钮,生成按钮的点击响应函数,在函数中增加如下代码,其中文件名中根据实际情况填写文件路径。
void CtestPictureDlg::OnBnClickedButton2()
{ 
	//获取对话框上图片控件的句柄
	CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC_PICTURE); 
	//设置静态控件窗口风格为位图居中显示
	pWnd->ModifyStyle(0xf,SS_BITMAP|SS_CENTERIMAGE);
	//显示图片
	pWnd->SetBitmap((HBITMAP)::LoadImage(NULL,
		_T("D:\\HELLO.BMP"),  //资源号或本地文件名
		IMAGE_BITMAP,       //装载位图 IMAGE_CURSOR光标 IMAGE_ICON图标
        0,                  //宽度 0为默认大小
        0,                  //高度 像素为单位
        LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE));
}
2、动态显示bmp文件,支持手工选择文件显示。
  1)增加一个pictureControl控件,修改ID为:IDC_PICTURE
  2)增加一个按钮,caption改为“动态显示图片”
  3)双击按钮,生成按钮的点击响应函数,在函数中增加如下代码。
void CtestPictureDlg::OnBnClickedButton1()
{
	//打开文件 定义四种格式的文件bmp gif jpg tiff
	CString filter;
	filter="所有文件(*.bmp,*.jpg,*.gif,*tiff)|*.bmp;*.jpg;*.gif;*.tiff| BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| GIF(*.gif)|*.gif| TIFF(*.tiff)|*.tiff||";
	CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter,NULL);          


	//按下确定按钮 dlg.DoModal() 函数显示对话框
	if( dlg.DoModal() == IDOK )
	{
		//打开对话框获取图像信息
		CString BmpName = dlg.GetPathName();     //获取文件路径名   如D:\pic\abc.bmp
		CString EntName = dlg.GetFileExt();      //获取文件扩展名
		EntName.MakeLower();                     //将文件扩展名转换为一个小写字符


		if(EntName.Compare(_T("bmp")) == 0)
		{
			//定义变量存储图片信息
			BITMAPINFO *pBmpInfo;       //记录图像细节
			BYTE *pBmpData;             //图像数据
			BITMAPFILEHEADER bmpHeader; //文件头
			BITMAPINFOHEADER bmpInfo;   //信息头
			CFile bmpFile;              //记录打开文件


			//以只读的方式打开文件 读取bmp图片各部分 bmp文件头 信息 数据
			if(!bmpFile.Open(BmpName, CFile::modeRead|CFile::typeBinary)) 
				return;
			if (bmpFile.Read(&bmpHeader,sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))
				return;
			if (bmpFile.Read(&bmpInfo,sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))
				return;
			pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];
			//为图像数据申请空间
			memcpy(pBmpInfo,&bmpInfo,sizeof(BITMAPINFOHEADER));
			DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;
			pBmpData = (BYTE*)new char[dataBytes];
			bmpFile.Read(pBmpData,dataBytes);
			bmpFile.Close();


			//显示图像
			CWnd *pWnd=GetDlgItem(IDC_PICTURE); //获得pictrue控件窗口的句柄
			CRect rect;
			pWnd->GetClientRect(&rect); //获得pictrue控件所在的矩形区域
			CDC *pDC=pWnd->GetDC(); //获得pictrue控件的DC
			pDC->SetStretchBltMode(COLORONCOLOR);
			StretchDIBits(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(),0,0,
				bmpInfo.biWidth,bmpInfo.biHeight,pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);
			delete pBmpInfo;
			delete pBmpData;
		}
	}
}
3、编译运行文件,点击“静态显示图片”和动态显示图片“选择“D:\\HELLO.BMP"文件,运行结果如图:

  • 3
    点赞
  • 0
    评论
  • 7
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

大红番茄

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值