我们知道在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);
- // 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);
- }
- }
通过上述方法我们可以显示任何一种格式的图像,并且可以等比例调整图像的大小,保证图像不变形。
转自:http://blog.youkuaiyun.com/cghver/article/details/6603725