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("保存图像文件失败!")); 
}

完成了

经验分享 程序员 微信小程序 职场和发展