MFC单文档应用程序显示图像,将图像另存为
/p
摘要: 1 利用VS2010向导创建一个MFC单文档应用程序MFCTest 2 在MFCTestView.h中引用<atlimage.h>,并创建一个CImage对象 #include "atlimage"
1 利用VS2010向导创建一个MFC单文档应用程序MFCTest
2 在MFCTestView.h中引用<atlimage.h>,并创建一个CImage对象
#include <atlimage.h> private: CImage image;
3 打开资源文件,选中Menu下面的IDR_MAINFRAME,添加一个新的菜单项“打开图像”,修改其ID为IDM_OPEN,再点击鼠标右键,添加事件处理程序,在弹出的对话框的列表中选择CMFCTestView
4 添加事件处理函数OnOpen的代码
void CMFCTestView::OnOpen() { // TODO: 在此添加命令处理程序代码 CFileDialog dlg(TRUE, _T(".bmp"), _T("*.bmp"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("位图文件(*.bmp)|*.bmp|JPEG文件(*.jpg)|*.jpg||")); if(dlg.DoModal() == IDOK) { if(!image.IsNull()) { image.Destroy(); } image.Load(dlg.GetPathName()); Invalidate(); } }
5 在MFCTestView中加入图像显示的代码
void CMFCTest2View::OnDraw(CDC* pDC) { CMFCTest2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 if(!image.IsNull()) { image.Draw(pDC->GetSafeHdc(), 0, 0); } }
效果如下:
转载:http://blog.csdn.net/foreverling/article/details/40083431
后续:将图片文件另存为代码:
BOOL saveTag = FALSE; void CIPView::OnPfileAs() { // TODO: 在此添加命令处理程序代码 CClientDC dc(this); CRect rect; BOOL showMsgTag; //是否要弹出”图像保存成功对话框" GetClientRect(&rect); //获取画布大小 HBITMAP hbitmap = CreateCompatibleBitmap(dc, rect.right - rect.left, rect.bottom - rect.top); //创建兼容位图 HDC hdc = CreateCompatibleDC(dc); //创建兼容DC,以便将图像保存为不同的格式 HBITMAP hOldMap = (HBITMAP)SelectObject(hdc, hbitmap); //将位图选入DC,并保存返回值 BitBlt(hdc, 0, 0, rect.right - rect.left, rect.bottom - rect.top, dc, 0, 0, SRCCOPY); //将屏幕DC的图像复制到内存DC中 CImage image; image.Attach(hbitmap); //将位图转化为一般图像 if (!saveTag) //如果图像是第一次被写入,则打开对话框 { saveTag = TRUE; showMsgTag = TRUE; CString strFilter = L"位图文件(*.bmp)|*.bmp|JPEG 图像文件|*.jpg| GIF图像文件 | *.gif | PNG图像文件 | *.png |其他格式(*.*) | *.* | "; CFileDialog dlg(FALSE, _T("bmp"), _T("iPaint1.bmp"), NULL, strFilter); if (dlg.DoModal() != IDOK) return; CString strFileName; //如果用户没有指定文件扩展名,则为其添加一个 CString strExtension; strFileName = dlg.m_ofn.lpstrFile; if (dlg.m_ofn.nFileExtension = 0) //扩展名项目为0 { switch (dlg.m_ofn.nFilterIndex) { case 1: strExtension = "bmp"; break; case 2: strExtension = "jpg"; break; case 3: strExtension = "gif"; break; case 4: strExtension = "png"; break; default: break; } strFileName = strFileName + "." + strExtension; } saveFilePath = strFileName; //saveFilePath为视类中的全局变量,类型为CString } else { showMsgTag = FALSE; } //AfxMessageBox(saveFilePath); //显示图像保存的全路径(包含文件名) HRESULT hResult = image.Save(saveFilePath); //保存图像 if (FAILED(hResult)) { MessageBox(_T("保存图像文件失败!")); } else { if (showMsgTag) MessageBox(_T("文件保存成功!")); } image.Detach(); SelectObject(hdc, hOldMap); }
转自 http://blog.csdn.net/loveaborn/article/details/6817617