网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.

MFC 使用GDI+ 绘制Png、Jpg等类型图片

本文出自 悠然品鉴 小悠原创,转载请务必注明出处:http://www.youranshare.com/codeorg/sid/129.html


MFC是微软对Win32 API的封装,使用较为简单,但是在美化方面MFC本身就比较欠缺了,单单只是简单的设置一下背景图片这个操作就得需要好多行代码,并且还不能直接使用Png、Jpg等图片,今天小悠就在这里简单的说一下MFC成显示png和jpg等图片的方法.

先看一下绘制的效果吧:     

首先说一下程序中需要引入的头文件以及lib库

 要想显示Png、Jpg等格式的图片,需要引入微软的GDI+图形设备接口,在你的MFC程序中 导入头文件GdiPlus.h 和库文件 gdiplus.lib就能使用GDI+了,小悠一般是这么做的:

//包含文件
#include <GdiPlus.h>
//GDI的库
#pragma comment(lib, "gdiplus.lib")

 

其次,在使用GDI+的时候需要初始化GDI+

初始化操作使用函数 GdiplusStartup(

  ULONG_PTR* token,

  const GdiplusStartupInput* input,

  GdiplusStartupOutput* output

);

来完成,其中

参数一:他是一个ULONG_PTR的指针,token这个参数就类

        似于一个句柄吧,关闭GDI+的时候需要用到它。

参数二:指针指向一个GdiplusStartupInput结构,其中包

        含了GDI+的一些信息。

参数三:指针到一个GdiplusStartupOutput结构,它接收

        一些GDI+信息

 

上面只是简单介绍了这个函数的参数,详细的信息你可以查看MSDN

例如小悠是这个样子初始化GDI+的:

//就一句话,里面的 两个变量
//ULONG_PTR m_Taken;
// Gdiplus::GdiplusStartupInput m_Input;
Gdiplus::GdiplusStartup(&m_Taken, &m_Input, NULL);

为了简单的说明,我们就直接在Onpaint里面完成绘制的全部操作

因为要绘制一张图片,首先我们需要将图片载入内存,然后你还需要知道你需要绘制的目标区域,最后告诉GDI+你的图片的剪切区域,完成绘制就OK了,下面是小悠简单的写的一个操作,在OnPaint里面完成的:

CDialogEx::OnPaint();
              //这里简单的绘制一下背景,就省略了一些 复杂的 操作
              //获取到DC
              CDC* pDC = GetDC();
              //你需要绘制的目标
              CRect clientRect;
              GetClientRect(&clientRect);
              //载入你的图片
              Gdiplus::Bitmap * lpBmp =Gdiplus::Bitmap::FromFile(_T("./bg.jpg"));;
              //绑定你 的DC
              Gdiplus::Graphics graph(pDC->m_hDC);
              //开始绘制操作
              graph.DrawImage(lpBmp,
                                          //目标位置
                                   Gdiplus::Rect(0,0,clientRect.Width(),clientRect.Height()),
                                          //图片的剪切
                                          0,0,lpBmp->GetWidth(),lpBmp->GetHeight(),
                                          Gdiplus::UnitPixel
                                          );
              graph.ReleaseHDC(pDC->m_hDC);
              delete lpBmp;

最后在对话框的析构函数中要释放GDI+的资源

释放一句话搞定:

if(m_Taken)
{Gdiplus::GdiplusShutdown(m_Taken);}

总结:

总的来说使用GDI+分为下面的几个简单步骤

包含对应的头文件,引入GDI+的lib库

初始化GDI+

绑定DC完成绘制

释放GDI+

 

下面附上小悠本文中的示例工程:

解压密码 yscode

百度网盘下载 http://pan.baidu.com/s/1qWsd1Dy




  • 标签:
  • MFC 绘制Png Jpeg
  • GDI+绘制
网站已经改版为Wordpress版本,这里是旧版本的快照,请不要在页面中留言.