gt;Invalidate();
}
}
void CImageShowView::OnFileSaveAs()
{
if(strOpenFileName.IsEmpty())
{
AfxMessageBox("当前没有打开图像文件,不能进行保存!");
return;
}
//建立图形对像
Graphics graphics(GetDC()->m_hDC);
//装入当前已经打开的图形文件
Image image(ToWChar(strOpenFileName.GetBuffer(strOpenFileName.GetLength())));
CString strFileSave;
//当其他格式的图像全部另存为BMP文件
static char szFilter="位图(*.BMP)|*.BMP|";
CFileDialog dlgChoseImage(0,"BMP",NULL,NULL,szFilter);
if(dlgChoseImage.DoModal()==IDOK)
{
strFileSave=dlgChoseImage.GetPathName();
CLSID clsid;
if(GetImageCLSID(L"image/bmp", &clsid))
{
image.Save(ToWChar(strFileSave.GetBuffer(strFileSave.GetLength())), &clsid, NULL);
//将保存后的图像进行显示
strOpenFileName=strFileSave;
this->Invalidate();
}
}
}
最后,为了显示浏览图像转换前后的效果,还应该在窗口中分另绘制转换前后的图像,这很容易,只需要在OnDraw函数中添加绘制代码,如下所述:
void CImageShowView::OnDraw(CDC* pDC)
{
CImageShowDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//如果没有选择显示图形文件,则不用重绘
if(strOpenFileName.IsEmpty())
return;
//显示当前打开的图像文件的全名
this->GetParent()->SetWindowText(strOpenFileName);
//建立图形对象
Graphics graphics(pDC->m_hDC);
//装入图形文件
Image image(ToWChar(strOpenFileName.GetBuffer(strOpenFileName.GetLength())));
Point destPoints =
{
Point(0, 0),
Point(image.GetWidth(), 0),
Point(0, image.GetHeight())
};
Point* pdestPoints = destPoints;
//在指定区域pdestPoints显示图像
graphics.DrawImage(&image, pdestPoints, 3);
}
在编译上面的程序之前,应该将Gdiplus.lib文件连编到项目中去,否则将会出现“LINK 2001”编译错误。该
程序在Visual Studio 6.0、Windows2000/XP下调试通过,它能够显示或转换的图像格式有BMP、GIF、JPEG 、Exif 、PNG 、TIFF 、ICON、WMF 、EMF等等。需要说明的是,本文只就GDI+编程的基本原理进行阐述,其实,GDI+的应用远不止于此。在GDI+的背后,有你意想不到的惊奇!
瞧,这程序运行起来是不是有些象ACDSee之类的图像浏览程序?如果对本程序进行些改进,你也以做出功能更加强劲的图像处理程序。本文中所提到的
程序,在我的主页“国税之家”(http://nationaltax.home.chinaren.com)的“个人世界”中可以下
下载到。有关GDI+的编
程序帮助信息,大家可以到微软的MSDN网站去查阅。如果你有Visual Studio .NET,这就最好,因为所附的MSDN for Visual Studio.NET 7.0中有GDI+编程所需的全部信息。