[摘要]”; CFileDialog dlgChoseImage(0,“BMP”,NULL,NULL,szFilter); if(dlgChoseImage.DoModal()==IDOK) strFil...
”;
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();
}
}
}
3.为了浏览图像转换前后的效果,还应该在窗口中分别绘制转换前后的图像,这需要在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、Windows 2000/XP下调试通过,它能够显示或转换的图像格式有BMP、GIF、JPEG、Exif、PNG、TIFF、ICON、WMF、EMF等等。需要说明的是,本文只就GDI+编程的基本原理进行了阐述,事实上,GDI+的应用远不止此。
结束语
如果对本程序进行些改进,还可以编制出功能更加强大的图像处理程序。本文中所提到的程序,在笔者的主页“国税之家”(http://nationaltax.home.chinaren.com)的“个人世界”中可以下载到。有关GDI+编程的帮助信息,大家可以到微软的MSDN网站去查阅。
关键词:VC完成多格式图像的转换