GDI+ 添加图片

想在界面里添加jpg 等格式的图片,试了很多方法,都不成功。后来发现要使用GDI+。把使用方法备份如下。

1.  在对应的头文件中添加两个变量,两个变量,是初始化GDI+环境必须的,只要作用范围与GDI+的环境作用范围一致就可以了。在卸载GDI+环境的时候,还要用到。

      Gdiplus::GdiplusStartupInput m_pGdiplusStartupInput;

ULONG_PTR m_pGdiToken;      //用来关闭gdi+

2. 包含对应的头文件,完成导入工作。

#include "GdiPlus.h"
using namespace Gdiplus;

#pragma comment (lib,"GdiPlus.lib");

3.在初始化时,导入相应的变量值,并在destroy 消息中销毁GDI+

       Gdiplus::GdiplusStartup(&m_pGdiToken, &m_pGdiplusStartupInput,NULL); //初始化,在OnInitialDlg()消息中

   GdiplusShutdown(m_pGdiToken);  //销毁 在destroy 消息

 

3.使用相应的操作方法,进行操作。 GDI+中必须用宽字体L。

Graphics g(this->m_hWnd);
FontFamily fontfamily(L"楷体");  
Gdiplus::Font f(&fontfamily, 16);
SolidBrush brush(Color(255, 0, 0, 255));
PointF point(200.0f, 300.0f);
g.DrawString(L"Hello", 10, &f, point, &brush); //要用画刷写字
Gdiplus::Pen pen(Color(255, 0, 0, 255));

g.DrawLine(&pen, 100, 0, 100, 100);

4. 添加图片

Image * m_pImage;  

Graphics s(GetDlgItem(IDC_PIC1)->m_hWnd);     //获取图片控件句柄

m_pImage = Image::FromFile(_T("D:\\1.jpg"));  

s.DrawImage(m_pImage,PointF(0.0f,0.0f));

5.上述方法无法缩放尺寸,如果要缩放尺寸,方法如下,

Image * m_pImage;  

Graphics s(GetDlgItem(IDC_PIC1)->m_hWnd);     //获取图片控件句柄

m_pImage = Image::FromFile(_T("D:\\1.jpg"));  

        Rect rect1;      //调用drawimage 必须使用GDI+的Rect 结构体
CRect rect;
GetDlgItem(IDC_PIC1)->GetWindowRect(&rect);
rect1.Height = rect.Height();
rect1.Width = rect.Width();
rect1.X = 0;                   //起始点的横坐标和纵坐标
rect1.Y = 0;
 
s.DrawImage(m_pImage, rect1, //缩放以后的矩形 必须是Rect结构体
0, 0, (*m_pImage).GetWidth(), (*m_pImage).GetHeight(),  //选中的图片原始的大小的范围
UnitPixel); //像素为单位

其实用GDI 虽然要不断的选入各种对象,画线也麻烦,但是用习惯了其实也还好,GDI+虽然很方便,但是,不熟悉。在导入新型格式的图片时,和处理图片作复杂绘图功能时,还只能用GDI+。

由于用GDI+每次的步骤都一样,可以考虑用三个宏,方便在每个类里使用

#define GDIDEFINE Gdiplus::GdiplusStartupInput m_pGdiplusStartupInput; ULONG_PTR m_pGdiToken;
#define GDISTARTUP Gdiplus::GdiplusStartup(&m_pGdiToken, &m_pGdiplusStartupInput, NULL);
#define GDISHUTDOWN GdiplusShutdown(m_pGdiToken);

猜你喜欢

转载自blog.csdn.net/zane_njfu/article/details/80140858