C++,CImage类的建立方法(可以打开图像和保存)
建立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("保存图像文件失败!"));
}
完成了
