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格式的图形文件了








MFC 是 Microsoft Foundation Class 的缩写,是一种基于 Windows 操作系统的 C++ 类库,用于开发 Windows 应用程序。如果想要用 MFC 解析 PDF 并生成图片,则需要使用第三方库。 以下是使用 MFC 和第三方库解析 PDF 并生成图片的步骤: 1. 下载并安装 PDF 解析库,例如 Adobe Acrobat SDK 或 Foxit PDF SDK。 2. 在 MFC 应用程序中添加 PDF 解析库的头文件和库文件。 3. 加载 PDF 文件,可以使用 PDF 解析库提供的接口或 MFC 的 CFile 类。 4. 通过 PDF 解析库提供的接口或 MFC 的 CDC 类创建位图和绘制 PDF 页面。 5. 将位图保存为图片文件,可以使用 MFC 的 CImage 类或 Windows API。 下面是一个使用 Adobe Acrobat SDK 的示例代码: ``` // 加载 PDF 文件 CAcroApp app; app.Initialize(); CAcroAVDoc avDoc; avDoc.Open("example.pdf", ""); CAcroPDDoc pdDoc = avDoc.GetPDDoc(); // 创建位图 CAcroRect rect(0, 0, 612, 792); // 页面大小 HBITMAP hBitmap = CreateBitmap(rect.right, rect.bottom, 1, 32, NULL); // 绘制 PDF 页面 CDC dc; dc.CreateCompatibleDC(NULL); HDC hdc = dc.GetSafeHdc(); HBITMAP hOldBitmap = (HBITMAP)SelectObject(hdc, hBitmap); pdDoc.DrawPage(hdc, 0, rect); // 保存为图片文件 CImage image; image.Attach(hBitmap); image.Save("example.png", Gdiplus::ImageFormatPNG); // 清理资源 SelectObject(hdc, hOldBitmap); DeleteDC(hdc); DeleteObject(hBitmap); pdDoc.Close(); avDoc.Close(); app.Exit(); ``` 需要注意的是,PDF 文件可能包含多个页面,需要循环遍历并绘制每一页。此外,不同的 PDF 解析库提供的接口和使用方法可能不同,需要按照具体的库文档进行操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值