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

我们知道在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”(×××是当前项目的名称),为其添加两个成员变量:

类型 变量名
GdiplusStartupInput m_GdiplusStartupInput
ULONG_PTR m_GdiplusToken

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

//GDI+图像库初始化

GdiplusStartup(&m_GdiplusToken,&m_GdiplusStartupInput,NULL);


(4)重写C×××App类的ExitInstance函数,并添加如下代码:

// TODO: 在此添加专用代码和/或调用基类
    GdiplusShutdown(m_GdiplusToken);
    return CWinApp::ExitInstance();


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

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

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

void C×××Dlg::DrawImg(CString c_path)
{
 Invalidate();//擦除上一次的图像
 UpdateWindow();
 int width,height;
 float rate;//等比例缩小的比例参数
 CDC* pDC=GetDC();
 Graphics graph(pDC->GetSafeHdc());
 Image* image=Image::FromFile(c_path.AllocSysString());//c_path为图像的路径
 width=image->GetWidth();
 height=image->GetHeight();
 CRect rect;
 GetClientRect(rect);
 rate=(float)width/(float)height;//宽度和高度的比例
 if(height>rect.Height())
 {

     graph.DrawImage(image,0,0,(int)(rate*rect.Height()),rect.Height());
     ReleaseDC(pDC);
 }
 else
 {
     graph.DrawImage(image,0,0);
     ReleaseDC(pDC);
 }
 
}



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


 



你可能感兴趣的:(C/C++)