• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 28次 | 进入软件测试论坛讨论

领测软件测试网

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_TITLE);
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第一版.

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网