想在界面里添加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);