基于mfc的数字图像处理的小软件pdd的诞生-打开图片及保存图片

来源:互联网 发布:php post 编辑:程序博客网 时间:2024/05/01 22:57

       做这个渣渣的软件是因为我们数字图像处理课程的需要而产生的,老师要我们做一个有图形化界面的软件能够对图片进行一系列的处理,所以我就选择的是基于多文档的mfc框架,来完成这个作业,然后我接下来会一步一步的说明我是怎么做这个软件的。

        我们首先要新建一个mfc文档,新建的过程我不再多说,百度有很多,新建完了之后,会看到如下的几个部分:

上面这个就是我们要打代码的文件了,

下面这个就是我们做界面的地方。

我们新建了MFC之后,可以运行一下,发现可以运行出来一个空项目,有打开,保存之类的按钮,也似乎有用一样,但是如果你点打开一张图片,窗口是没有显示的(这里说明一下,我是在vs2013下做的,下面的过程都是vs2013平台下的。),这是因为我们还没有添加绘制窗口的代码。

先了解,怎么为界面上的按钮添加事件处理程序,假如我们对打开按钮添加事件处理程序,鼠标右键点击打开按钮如下图:

点击添加事件处理程序,就可以添加了,理论上,我们可以将这个程序添加的任意一个cpp文件中,但是为了方便,我将这个事件处理程序添加到了CpddView.cpp的这个文件中,因为打开之后,就要马上进行窗口的绘制。

void CpddView::OnFileOpen(){CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("图片文件(*.jpg;*.jpeg;*.gif;*.bmp;*png)|*.jpg;*.jpeg;*.gif;*.bmp;*png|位图文件(*.BMP)|*.BMP||"));if (IDOK == dlg.DoModal()){strPicPath.Format(_T("%s"), dlg.GetPathName());pathName = dlg.GetPathName();extname = dlg.GetFileExt();             //返回选定文件的扩展文件名extname.MakeLower();        //将后缀名变成小写的flag = true;Invalidate();}}

上面就是我为打开按钮添加的事件处理程序,这个时候,得到了一个参数pathName就是文件的路径,在接下来我们绘制窗口的时候要用到。

void CpddView::OnDraw(CDC* pDC){CpddDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;if (0 == extname.Compare(_T("bmp"))){ShowBitmap(pDC, strPicPath);}else{if (0 == extname.Compare(_T("jpg")) || 0 == extname.Compare(_T("png")) || 0 == extname.Compare(_T("jpg")) | 0 == extname.Compare(_T("jpeg")) || 0 == extname.Compare(_T("gif"))){ShowPic(pDC, strPicPath);}}}

我们重写CpddView.cpp中的OnDraw()函数,调用的ShowPic函数如下:

 

void CpddView::ShowPic(CDC* pDC, CString strPicPath){if (flag == true){if (!m_MyImage.IsNull())m_MyImage.Destroy();m_MyImage.Load(strPicPath); // 载入图片flag = false;}int iWidth = m_MyImage.GetWidth();int iHeight = m_MyImage.GetHeight();m_MyImage.Draw(pDC->m_hDC, 0, 0, iWidth, iHeight);}


m_MyImage就是Cimge类的一个对象,然后我们点击打开图片的按钮之后,就可以在窗口里面将图片显示了。显示图片之后,必然会对图片进行一系列的处理后要进行保存,而保存按钮是对原图进行操作,我们更多的希望是另存为一张图片,将原图和修改后的图片区别,所以我们要对另存为这个按钮添加事件处理程序,代码如下:

void CpddView::OnFileSaveAs(){CpddDoc* pDoc = GetDocument();CFileDialog dlg(FALSE, _T("bmp"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("JPG File(*.jpg)|*.jpg|Bmp File(*.bmp)|*.bmp||"), NULL, NULL);if (dlg.DoModal() == IDOK){HRESULT hResult = m_MyImage.Save(dlg.GetPathName(), Gdiplus::ImageFormatBMP);}}
有了以上的操作,就可以对图片进行打开和保存的操作啦,对图片进行处理我们下次再说。


0 0
原创粉丝点击