频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

使用CImage类处理图像显示与格式转换

来源: 作者: 出处:巧巧读书 2006-09-12 进入讨论组
访问地址 http://www.qqread.com/pb/u236997.html下载本文所附源代码


Introduction
CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以
相互转换。


Background

我们知道,Visual C++的CBitmap类和静态图片控件的功能是比较弱的,它只能显示出在资源总的图标、位图、光标以及图元文件的内容,而不像
VB中的Image控件可以显示出绝大多数的外部图像文件(BMP,GIF,JPEG等)。因此,要想在对话框或者其它窗口中显示外部图像文件则只能借助于第
三方提供的控件或者代码。现在,MFC和ATL共享的新类CImage为图象处理提供了许多相应的方法,这使得Visual C++在图像方面的缺憾一去不复
返了。
Using the code
使用CImage的一般方法是这样的过程:
(1) 打开应用程序的stdafx.h文件添加CImage类的包含文件:

#include <atlimage.h>
(2)定义CImage类对象,然后调用CImage::Load方法装载一个外部图像文件。

(3)调用CImage::Draw方法绘制图像。


例如在单文档程序中显示图像文件的例子:
void CEx_ImageView::OnFileOpen()
{
// TODO: 在此添加命令处理程序代码
CString strFilter;
CSimpleArray aguidFileTypes;
   HRESULT hResult;
hResult = m_Image.GetExporterFilterString(strFilter,aguidFileTypes,_T("All Image Files"));
if (FAILED(hResult)) {
 MessageBox("GetExporterFilter调用失败!");
 return;
}
CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,strFilter);
if (IDOK != dlg.DoModal()) {
 return;
}
m_Image.Destroy();
hResult = m_Image.Load(dlg.GetFileName());
if (FAILED(hResult)) {
 MessageBox("调用图像文件失败!");
 return;
}
CString str;
str.LoadString(AFX_IDS_APP_T99vLE);
AfxGetMainWnd()->SetWindowText(str+"-"+dlg.GetFileName());
Invalidate();
}


将图片用其他格式保存:
void CEx_ImageView::OnFileSaveAs()
{
if(m_Image.IsNull()){
 MessageBox("您还没有打开一个要保存的图像文件!");
 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 + ’.’+strExtension;
}
// 保存图像
HRESULT hResult = m_Image.Save(strFileName);
if (FAILED(hResult)) {
 MessageBox("保存图像文件失败!");
}
}

History
2003.10.1第一版. 更多文章 更多内容请看数据库处理专题专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章