";
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[3] =
{
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+编程所需的全部信息。
……