建立CImage类(以vs2015为例)
一, 新建一个MFC项目:名字为 image3
二, 单个文档,MFC标准,然后完成。
三,打开应用程序的 stdafx.h 文件添加 CImage 类的包含文件:
#include <atlimage.h>
四,在 view 类中添加成员变量 CImage m_Image;即在类视图—Cimage3View—右键—添加—变量。
变量类型 填CImage,变量名 填m_Image。
五,还是上一步中的,类视图—Cimage3View—右键—类向导—搜索命令ID_FILE_OPEN—双击COMMAND—点击确定—会自动跳到让你输入程序
六,输入代码:
程序代码:
// TODO: 在此添加命令处理程序代码CString strFilter;CSimpleArray<GUID> aguidFileTypes;HRESULT hResult;// 获取 CImage 支持的图像文件的过滤字符串hResult = m_Image.GetExporterFilterString(strFilter, aguidFileTypes, _T("All Image Files"));if (FAILED(hResult)) {MessageBox(_T("GetExporterFilter 调用失败!"));return;} CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);if (IDOK != dlg.DoModal())return;m_Image.Destroy();// 将外部图像文件装载到 CImage 对象中 hResult = m_Image.Load(dlg.GetPathName());if (FAILED(hResult)) {MessageBox(_T("调用图像文件失败!"));return;} // 设置主窗口标题栏内容 CString str;str.LoadString(AFX_IDS_APP_TITLE);AfxGetMainWnd()->SetWindowText(str + _T(" - ") + dlg.GetFileName());Invalidate(); // 强制调用 OnDraw
七,把上一段代码输入后,往上拉,定位到 Cimage3View::OnDraw(CDC* /pDC/) 函数处,修改成下列代码:
Cimage3Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!m_Image.IsNull()){m_Image.Draw(pDC->m_hDC, 0, 0);}
八,将图片用其它格式保存
类视图—Cimage3View—右键—类向导—搜索命令 ID_FILE_SAVE_AS–双击COMMAND—点击确定—会自动跳到让你输入程序
程序代码:
// TODO: 在此添加命令处理程序代码
if (m_Image.IsNull()) {
MessageBox(_T("你还没有打开一个要保存的图像文件!"));
return;
}
CString strFilter;
strFilter ="位图文件|*.bmp|JPEG 图像文件|*.jpg| \
GIF 图像文件|*.gif|PNG 图像文件|*.png||";
CFileDialog dlg(FALSE,NULL,NULL,NULL,strFilter);
if ( IDOK != dlg.DoModal())
return;
// 如果用户没有指定文件扩展名,则为其添加一个
CString strFileName;
CString strExtension;
strFileName = dlg.m_ofn.lpstrFile;
if(dlg.m_ofn.nFileExtension == 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 + _T(".") + strExtension;
}
// 图像保存
HRESULT hResult = m_Image.Save(strFileName);
if (FAILED(hResult))
{
MessageBox(_T("保存图像文件失败!"));
}
完成了