MFC 显示bmp图片

首先从工具箱中选择一个Picture Control 和3个Button到对话框

取Picture Control 的 ID 为IDC_STATIC_PICURE

然后添加bmp资源文件


双击静态显示1.添加代码:

void CMFCdrill4Dlg::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
	CBitmap bitmap;
	bitmap.LoadBitmapW(IDB_BITMAP1);
	CStatic *p = (CStatic*)(GetDlgItem(IDC_STATIC_PICTURE));
	p->ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);           // 其中0xf是移除的风格
	p->SetBitmap(bitmap);
}
此时就可以显示图片了。



双击静态显示 -2 编写代码:

void CMFCdrill4Dlg::OnBnClickedButton3()
{
	// TODO:  在此添加控件通知处理程序代码
	CStatic *pwnd = (CStatic*)GetDlgItem(IDC_STATIC_PICTURE);
	pwnd->ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);
	pwnd->SetBitmap((HBITMAP)::LoadImage(NULL,
		_T("E:\\Code Storage\\资源文件夹\\pic\\2.BMP"),// 添加资源号或本地文件名
		IMAGE_BITMAP,                                  // 装载位图IMAGE_CURSOR光标IMAGE_ICON图标
		0,                                             // 宽度0为默认大小
		0,                                             // 高度像素为单位
		LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE));
}
点击第二个按钮也可以显示图片了。

双击 打开图片 ,编写代码:

void CMFCdrill4Dlg::OnBnClickedButton2()
{
	// TODO:  在此添加控件通知处理程序代码
	CString filter = L"所有文件(*.bmp,*.jpg,*.tiff)|*.bmp;*.jpg;*.gif;*.tiff| BMP(*.bmp)|*.bmp|JPG(*.jpg)|*.jpg|GIF(*.gif)|TIFF(*.tiff)|*.tiff";
	CFileDialog Ofile(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter, NULL);

	if (IDOK == Ofile.DoModal()){
		CString fPath = Ofile.GetPathName();       // 获取文件路径
		CString fEnt = Ofile.GetFileExt();         // 获取文件扩展名
		fEnt.MakeLower();                          // 将文件扩展名转化为小写字母

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

			// 以只读的方式打开文件 读取bmp图片个部分bmp的文件头,信息和数据
			if (!bmpFile.Open(fPath, 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_STATIC_PICTURE);
			CRect rect;
			pwnd->GetClientRect(&rect);
			CDC *pDC = pwnd->GetDC();        // 获取picture控件所在的位置
			pDC->SetStretchBltMode(COLORONCOLOR);
			StretchDIBits(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 0, 0,
				bmpInfo.biWidth, bmpInfo.biHeight, pBmpData, pBmpInfo, DIB_RGB_COLORS, SRCCOPY);
		}

	}
}


到这里就可以打开任意的bmp格式的图形文件了








  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值