GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。顾名思义,GDI+就是GDI得增强版本,在.net构架中,我们可以通过GDI+来实现图形图像的编程。
在绘画的时候,画家需要使用画笔或者画刷来把不同的颜色涂抹到画布上,而我们在对图形图像进行编程的时候,也是通过画笔和画刷把不同的颜色输出到屏幕上。
画笔是 Pen 类的实例,用于绘制线条和空心形状;画刷是从 MustInherit(抽象)Brush 类派生的任何类的实例,可用于填充形状或绘制文本;Color(颜色) 对象是表示特定颜色的类的实例,画笔和画刷可使用这些对象来指示所呈现图形的颜色。
一、颜色
在图像绘制中,最重要的就是颜色,.NET Framework 的 Color 结构用于表示不同的颜色。
1、系统定义的颜色
我们可以通过 Color 结构访问vb.net中枚举的若干系统定义的颜色,例如我们可以通过如下方式获取系统颜色
Dim myColor as Color
myColor = Color.Red
myColor = Color.Aquamarine
myColor = Color.LightGoldenrodYellow
myColor = Color.PapayaWhip
myColor = Color.Tomato
2、用户定义的颜色
我们除了可以访问系统定义好的颜色外,还可以使用 Color.FromArgb 方法来实现用户定义的颜色,使用 Color.FromArgb 方法时,我们按顺序指定颜色中红色、蓝色和绿色各部分的强度,如下所示:
Dim myColor as Color
myColor = Color.FromArgb(20,58,77)
色值中的每个数字均必须是从0到255之间的一个整数,其中0表示没有该颜色,而255则为所指定颜色的完整饱和度;因此,Color.FromArgb(0,0,0) 为黑色,而 Color.FromArgb(255,255,255) 为白色。
3、Alpha 混合处理(透明度)
Color.FromArgb 方法除了可以指定RGB(红、绿、蓝)三色,还有一个Alpha参数,Alpha 表示所呈现图形后面的对象的透明度,对于各种底纹和透明度效果很有用。
在 Color.FromArgb 方法中四个参数的第一个参数即是Alpha参数,取值范围是从 0 到 255 之间的任一整数。如下两例:
Dim myColor as Color
myColor = Color.FromArgb(127, 20, 58, 77)
创建自定义颜色,且大致为 50% 透明度。
Dim myColor as Color
myColor = Color.FromArgb(128, Color.Tomato)
创建系统定义的颜色 Tomato 的颜色,且约为 50% 透明度。
上面我们理解了如何在vb.net中实现我们需要的颜色,就如学画画的时候知道了怎么调配色彩,那么作画的时候还需要使用工具来把这些颜色涂抹在画布上构成我们需要的图案,这个工具就是画笔和画刷。
二、画笔
我们使用画笔来绘制线条、曲线以及勾勒形状轮廓。它是 Pen 类的实例,下面的示例说明如何创建一支红色的笔:
Dim myPen as New Pen(Color.Red)
一个实例化后的画笔就具有了宽度、样式、颜色三种属性,我们可以在创建画笔之后对它的这三种属性进行调整:
宽度(Width):使用该画笔时所绘线条的宽度,默认的画笔宽度是一个像素单位;
样式(DashStyle):画笔绘制图形时的线型,包括实线、虚线、点线以及由点线与虚线组成的点划线、双点划线等多种样式;
颜色(Color):画笔绘制的线条的颜色,一般情况下我们是在创建画笔的时候就指定了画笔的颜色,但是也可以通过画笔的Color属性来改变。
下面示例演示如何创建并调整一个画笔的属性,然后绘制一条点划线。
首先在窗体上放置一个PictureBox 控件,一个按钮,把以下代码放到按钮的Click事件中:
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim myColor As Color
myColor = Color.FromArgb(128, Color.Tomato)
Dim mPen As New Pen(myColor)
mPen.Color = Color.Red
mPen.Width = 3
mPen.DashCap = DashCap.Triangle
'指定划线的样式为点划线
mPen.DashStyle = DashStyle.DashDot
g.DrawLine(mPen, 0, 0, 100, 100)
运行后,单击按钮,我们可以看到如下的效果:
三、画刷
画刷用于与 Graphics 对象一起创建实心形状和呈现文本的对象,有几种不同类型的画刷,如下所示:
Brush 类 |
说明 |
SolidBrush |
画刷的最简单形式,它用纯色进行绘制。 |
HatchBrush |
类似于 SolidBrush,但是该类使您可以从大量预设的图案中选择绘制时要使用的图案,而不是纯色。 |
TextureBrush |
使用纹理(如图像)进行绘制。 |
LinearGradientBrush |
使用沿渐变混合的两种颜色进行绘制。 |
PathGradientBrush |
基于开发人员定义的唯一路径,使用复杂的混合色渐变进行绘制 |
1、使用纯色画刷
纯色画刷SolidBrush是指使用单一的颜色作为画刷的颜色,下面的示例说明如何在窗体上绘制一个纯红色的椭圆:
Dim g as Graphics = Me.CreateGraphics
Dim myBrush as New SolidBrush(Color.Red)
g.FillEllipse(myBrush, New RectangleF(0, 0, 100, 150))
运行效果如下图所示:
2、简单图案
HatchBrush 使您可以从大量预设的图案中选择绘制时要使用的图案,而不是纯色。下面的示例说明如何创建一个 HatchBrush,它使用方格呢图案进行绘制,并使用红色作为前景色,蓝色作为背景色。
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim myBrush As New System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.Plaid, Color.Red, Color.Blue)
g.FillEllipse(myBrush, New RectangleF(0, 0, 150, 150))
运行后效果图如下:
3、复杂图案
纹理画笔 TextureBrush 通过使用图像作为图案来填充形状或文本。
下面的示例说明如何创建一个 TextureBrush,它使用名为 qqread.bmp 位于C盘下的图像进行绘制。
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim myBrush As New TextureBrush(New Bitmap("C:\qqread.bmp"))
g.FillEllipse(myBrush, New RectangleF(0, 0, 150, 150))
运行后效果如下所示:
4、复杂底纹
渐变画笔支持复杂底纹。使用 LinearGradientBrush,可以创建沿线性渐变的两种颜色平滑、渐进式的混合。PathGradientBrush 支持许多更复杂的底纹和着色选项。下面的示例说明如何使用 LinearGradientBrush 笔刷实现由红色逐渐向黄色混合而形成的渐变。
Dim g As Graphics = Me.PictureBox1.CreateGraphics
Dim myBrush As New System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.Red, Color.Yellow, System.Drawing.Drawing2D.LinearGradientMode.Vertical)
g.FillEllipse(myBrush, New RectangleF(0, 0, 150, 150))
运行后效果如下图所示:
本文是针对GDI+编程的入门知识,我们绘制更复杂的图形都是在熟练运用这些知识的基础上的,下一步我们就去了解如何使用GDI+绘制线图。