GDI+ 安装、配置、使用

一、安装、配置

使用GDI+很简单。需要做的有一下几个步骤。
1.       安装GDI+ SDK开发包。网上很多地方都有下载。解压到一个地方即可。
2.       设置编译器的包含路径,VC6的设置方法是 Tools/Options/Directories下分别设置inlude和lib的路径即可。当然也可以在每个工程的Setting里修改相关的设置 达到同样的效果。在包含相关的文件的时候,加上全路径也可以。
3.       在要使用的工程中,增加如下代码
#include <comdef.h>   //初始化一下com口

//在GDI+中,需要定义一个ULONG_PTR。
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif

//通过typedef定义的。与上面的宏定义的作用效果是一样的。这两个,任意一种方法都可以。其他的能达到同样效果的方法也一样。
#if defined(_WIN64)
typedef unsigned __int64 ULONG_PTR;
#else
typedef unsigned long ULONG_PTR;
#endif

#include "GdiPlus.h"          //包含DGI+的头文件。

//使用Gdiplus名字空间,可选,不用的话,相关的地方加上[ Gdiplus :: ] 也一样。
using namespace Gdiplus;
上面的代码添加在需要的地方即可,一般可以写在StdAfx.h中。

1.     加载lib。
#pragma comment( lib, "gdiplus.lib" )
上面的代码,或者在项目的设置里增加引入的lib文件,都可以。

2.     初始化GDI+环境
GdiplusStartup( &m_pGdiToken , &m_gdiplusStartupInput , NULL );
下面的两个变量,是初始化GDI+环境必须的,只要作用范围与GDI+的环境作用范围一致就可以了。在卸载GDI+环境的时候,还要用到。
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;

3.     卸载GDI+环境
GdiplusShutdown(m_pGdiToken);
在确定不使用GDI+的时候,写上上面一句代码即可。

这样,GDI+的环境配置就OK了!

二、GDI+使用的几个例子

1.     第一个例子——“Hello World!”

第一个最经典的例子当然是Hello World了:)

Graphics mygraphics(*pDC);               //创建一个Graphics对象

//创建一个笔刷第一项是透明度(0--255)后三项是RGB值
SolidBrush brush( Color(100,0,0,255) );   

FontFamily fontFamily(L"Latha");         //选择一种字体

Font font( &fontFamily, 1, FontStyleRegular,UnitInch );
     
PointF pointF(5,5);
mygraphics.DrawString( L"Hello Word!", -1, &font, pointF, &brush );


上面的例子就会显示出一行大大的“Hello World!”。

需要注意的是,Font的构造函数,里面的第二个参数是表示字体大小的。与过去不同,这里的单位不再是像素,而是一相对的长度单位em。常用于CSS里对距离,长度,字号等的定义。
它是参照于预先设置的一个值的。根据具体的使用环境不同,其标准值也不一样。
而且,这个参数是支持实数的,也就是说不必是整数。


2.     第二个例子——载入一副图片

Graphics imgraphics( *pDC );
//文件路径,需要注意的是GDI+的字符串参数都是宽字符的
Image image(L"001.jpg");  
imgraphics.DrawImage(&image,0,0);


很简单的就可以载入并显示出来一个jpg图片了。需要注意的是,GDI+的所有字符串参数,都是要宽字符的。

可以发现Graphics在GDI+中,的作用,有些象GDI种的CDC,不过不同的是,Graphics是设备无关的,所以我们不必在费神的考虑设备无关位图和设备相关位图的差别了。
同时,GDI+本身就支持非常多的图片格式,所以载入图片并显示的过程被大大简化了。需要注意的是,某些常用格式的图片本身还有很多差异,例如bmp图片 就又被细分为16位,24位,32位,根据其保存的算法不同还分作压缩和非压缩的。根据掩码不同,16位又分成了多种格式。这些格式里就有很多是GDI+ 不支持的。


3.     第三个例子——绘制直线

Graphics Pathraphics( *pDC );
//创建一个矢量图形对象
GraphicsPath path;
          
Pen newPen( Color( 255, 0, 0 ), 3 );
//为Path 增加一条直线, 可以增加多条。
path.AddLine( 0,0,100,100 );

Pathraphics.DrawPath( &newPen, &path );

GDI+的Pen类还提供SetDashStyle和SetDashPattern方法来设置画笔的预定义风格和自定义类型。其中,预定义风格可以 有:DashStyleSolid(实线)、DashStyleDash(虚线)、DashStyleDot(点线)、 DashStyleDashDot(点划线)、DashStyleDashDotDot(双点划线)和DashStyleCustom(自定义类型)。

Graphics Pathraphics( *pDC );
//创建一个矢量图形对象
GraphicsPath path;
          
Pen newPen( Color( 255, 0, 0 ), 3 );
newPen.SetDashStyle(DashStyleCustom); //自定义风格

REAL dashVals[4] = {
                 2, // 短划长为2
                 2 ,// 间隔为2
                 7, // 短划长为7
                 2 }; // 间隔为2
          
newPen.SetDashPattern(dashVals, 4);

//当连续增加时,效果是将所特有被增加的点连接起来。
path.AddLine( 0,0,100,100 );
path.AddLine( 200,100,200,50 );

Pathraphics.DrawPath( &newPen, &path );


经过少许的变化,这次画出了一条稍微复杂一点的线。利用一个简单的浮点数组来定义点线的周期,就可以画出不同的点划线了。
通过newPen.SetStartCap( LineCapArrowAnchor );
       newPen.SetEndCap( LineCapDiamondAnchor );
还能够设置线的端点的样式,例如箭头,圆等等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值