VC++2008中基于对话框GDI+的图像显示

来源:互联网 发布:软件项目管理软件书籍 编辑:程序博客网 时间:2024/05/21 03:18

我们知道在VC++中一般只可以显示BMP格式的图像,要显示其他格式的图片往往显得有些力不从心,用GDI+能够使问题得到很好的解决。关于GDI+是个什么东西,我不去多说了,大家谷歌一下就会知道。

 首先在VC++2008中进行GDI+的配置:

1.在项目属性中添加GDI+静态链接库:

新建一个基于对话框的项目,在项目中选择【项目】→【×××属性】(×××是当前项目的名称)

按如下所示的步骤操作:

现在完成了“Debug”模式下的GDI+的配置,此时Debug模式下生成的程序就能正常编译了。要想在Release模式下也能正常编译,只要选择上面对话框左上角【配置】下的Release选项,然后重复刚才的添加方法即可。

2.添加必要代码:

(1)打开“解决方案资源管理器“,打开“stdafx.h”文件,在其中添加如下代码(添加到本文件的末尾):

#include "gdiplus.h"
using namespace Gdiplus;

(2)打开“类视图”,选中应用程序类“C×××App”(×××是当前项目的名称),为其添加两个成员变量:

类型变量名GdiplusStartupInputm_GdiplusStartupInputULONG_PTRm_GdiplusToken

(3)在C×××App类的InitInstance函数中添加如下代码:

[cpp] view plaincopy
  1. //GDI+图像库初始化  
  2.   
  3. GdiplusStartup(&m_GdiplusToken,&m_GdiplusStartupInput,NULL);  
(4)重写C×××App类的ExitInstance函数,并添加如下代码:

[cpp] view plaincopy
  1. // TODO: 在此添加专用代码和/或调用基类  
  2.     GdiplusShutdown(m_GdiplusToken);  
  3.     return CWinApp::ExitInstance();  

这样配置工作就全部结束了。

完成配置我们就可以用GDI+显示图像了

我们可以定义一个显示图像的函数:

[cpp] view plaincopy
  1. void C×××Dlg::DrawImg(CString c_path)  
  2. {  
  3.  Invalidate();//擦除上一次的图像  
  4.  UpdateWindow();  
  5.  int width,height;  
  6.  float rate;//等比例缩小的比例参数  
  7.  CDC* pDC=GetDC();  
  8.  Graphics graph(pDC->GetSafeHdc());  
  9.  Image* image=Image::FromFile(c_path.AllocSysString());//c_path为图像的路径  
  10.  width=image->GetWidth();  
  11.  height=image->GetHeight();  
  12.  CRect rect;  
  13.  GetClientRect(rect);  
  14.  rate=(float)width/(float)height;//宽度和高度的比例  
  15.  if(height>rect.Height())  
  16.  {  
  17.   
  18.      graph.DrawImage(image,0,0,(int)(rate*rect.Height()),rect.Height());  
  19.      ReleaseDC(pDC);  
  20.  }  
  21.  else  
  22.  {  
  23.      graph.DrawImage(image,0,0);  
  24.      ReleaseDC(pDC);  
  25.  }  
  26.    
  27. }  


通过上述方法我们可以显示任何一种格式的图像,并且可以等比例调整图像的大小,保证图像不变形。


转自:http://blog.csdn.net/cghver/article/details/6603725