null第14章 图形操作第14章 图形操作在之前的章节中我们学习了如何使用窗体和控件来创建应用程序。有时可能要使用无法用控件创建的图像、图形或效果来自定义程序的外观;或者可能要创建一个画图的应用程序,这就要用到图形功能。在VB.NET中,使用图形方法可以在窗体或控件上的任意位置进行几乎任意的绘制。章节内容章节内容14.1 什么是GDI+
14.2 基本绘图操作
14.3 实例:绘制饼图报表
14.1 什么是GDI+14.1 什么是GDI+为了在Windows操作系统上作画,微软创造了图形设备接口,简称为GDI(Graphics Device Interface),它是类、函数、变量和常量的集合,或者说是在应用程序中绘画所需要的绝大部分对象。GDI由已安装在计算机中的Gdi.dll动态库来提供。
新的操作系统Windows XP和Windows Server 2003中,GDI+已经替换掉了GDI(图形设备接口)。GDI+的主要工具GDI+的主要工具图形平台
填充色彩
图形对象
画笔
绘图方法
14.2 基本绘图操作14.2 基本绘图操作计算机屏幕由数千个微小的点组成,这些点称为像素。程序通过定义每个像素的颜色来控制屏幕显示的内容。
将窗体看成一块可以在上面绘制的画布。其尺寸用像素来度量。Paint事件Paint事件窗体和控件都有一个Paint事件。
每当需要重新绘制窗体和控件,如首次显示窗体或窗体被另一个窗体覆盖等,此时就会触发该事件。
所编写的用于显示图形的代码通常都包含在Paint事件处理程序中。14.2.1 创建Graphics对象14.2.1 创建Graphics对象绘图时,需要先创建Graphics对象,然后才可以使用GDI+绘制线条和形状、呈现文本或显示与操作图像。Graphics对象表示GDI+绘图表面,是用于创建图形图像的对象。
(1)在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs的一部分。在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。(1)在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs的一部分。在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。1 Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
2 ' 声明一个Graphics的实例,并从PaintEventArgs参数中获取Graphics对象
3 Dim g As Graphics = e.Graphics
4 ' 这里插入绘图的代码
5 End Sub
(2)调用某控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示该控件或窗体的绘图图面。如果想在已存在的窗体或控件上绘图,则需要使用此方法。(2)调用某控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示该控件或窗体的绘图图面。如果想在已存在的窗体或控件上绘图,则需要使用此方法。1 Dim g as Graphics
2 g = Me.CreateGraphics( )
(3)从Image类派生的任何对象创建Graphics 对象。通过调用Graphics.FromImage方法,可以获得要从其创建Graphics对象的Image变量的名称。此方法在需要更改已存在的图像时十分有用。
(3)从Image类派生的任何对象创建Graphics 对象。通过调用Graphics.FromImage方法,可以获得要从其创建Graphics对象的Image变量的名称。此方法在需要更改已存在的图像时十分有用。
1 Dim myBitmap as New Bitmap("D:\Image\myPic.bmp")
2 Dim g as Graphics = Graphics.FromImage(myBitmap)
Pen类:绘制线条、勾勒形状轮廓或呈现其他几何表示形式,也称为画笔对象。Pen类:绘制线条、勾勒形状轮廓或呈现其他几何表示形式,也称为画笔对象。Pen类的构造函数有以下几种形式。
Pen(Brush)
Pen(Color)
Pen(Brush,Single)
Pen(Color,Single)
其中,Brush参数是画刷对象;Color参数为指定的颜色;Single类型的参数表示线宽。
Brush类:填充图形区域,如实心形状、图像或文本,也称为画刷对象。Brush类:填充图形区域,如实心形状、图像或文本,也称为画刷对象。常用的画刷对象有SolidBrush(单色画刷)、TextureBrush(纹理画刷)和LinearGradientBrush(线性渐变画刷)。
null下面的代码创建了一个单色的画刷。
1 Dim customColor As Color = Color.FromArgb(50, Color.Gray)
2 Dim shadowBrush As SolidBrush = New SolidBrush(customColor)
nullFont类,提供有关在呈现文本时要使用什么形状的说明。
Color结构,表示要显示的不同颜色。
VB.NET中,这些与绘图有关的类或结构都位于System.Drawing命名空间。
14.2.2 绘制直线14.2.2 绘制直线Graphics对象的DrawLine方法用于绘制直线,其重载列表如下。
DrawLine(Pen,Point,Point)。
DrawLine(Pen,PointF,PointF)。
DrawLine(Pen, Int32, Int32, Int32, Int32)。
DrawLine(Pen, Single, Single, Single, Single)。
其中,Pen参数为Pen类的对象,Point和PointF结构表示整型或浮点型的点对。后两种重载方法中的4个Int32参数和Single参数分别表示两个点的坐标。
null下面的代码在窗体上绘制一条直线。
1 Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
2 Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Red,5)
3 Dim formGraphics As System.Drawing.Graphics
4 formGraphics = Me.CreateGraphics( )
5 formGraphics.DrawLine(myPen, 0, 0, 200, 200)
6 myPen.Dispose( )
7 formGraphics.Dispose( )
8End Sub
14.2.3 绘制矩形14.2.3 绘制矩形Graphics对象的DrawRectangle方法用于绘制矩形,其重载列表如下。
DrawRectangle(Pen,Rectangle)
DrawRectangle(Pen,Int32, Int32, Int32, Int32,)
DrawRectangle(Pen,Single,Single,Single,Single)
其中,Rectangle结构存储4个整数,表示一个矩形的左上角坐标、宽度和高度。其他的4个Int32或Single类型的参数依次表示矩形左上角X坐标、Y坐标、宽度和高度。
null下面的代码绘制了两条直线,一条是黑色的宽度为1的线,另一条为绿色的宽度的为10的线,设置绿色画笔为居中对齐显示。
1Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
2 Dim blackPen As New Pen(Color.FromArgb(255, 0, 0, 0), 1)
3 Dim greenPen As New Pen(Color.FromArgb(255, 0, 255, 0), 10)
4 ' 设置绿色画笔的对齐方式
5 greenPen.Alignment = PenAlignment.Center
6 ' 绘制
7 e.Graphics.DrawRectangle(greenPen, 10, 100, 50, 50)
8 e.Graphics.DrawRectangle(blackPen, 10, 100, 50, 50)
9 ' 释放画笔
10 blackPen.Dispose( )
greenPen.Dispose( )
12End Sub
14.2.4 绘制椭圆与圆14.2.4 绘制椭圆与圆Graphics对象的DrawEllipse方法用于绘制一个由边框定义的椭圆,该边框由一对坐标、高度和宽度指定,其重载列表如下。
DrawEllipse(Pen,Rectangle)。
DrawEllipse(Pen,RectangleF)。
DrawEllipse(Pen,Int32,Int32,Int32,Int32)。
DrawEllipse(Pen,Single,Single,Single,Single)。
其中,Rectangle和RectangleF结构用于定义一个矩形边框,4个Int32和Single参数则分别定义边框的左上角X坐标、Y坐标、高度和宽度。
null下面的代码绘制了一个圆形。
1 Dim blackPen As New Pen(Color.Black, 3)
2 Dim rect As New Rectangle(10, 10, 200, 200)
3 e.Graphics.DrawEllipse(blackPen, rect)
null如果只需要绘制椭圆的一部分,则使用DrawArc方法。
该方法用于绘制一段弧线,前面几个参数与DrawElllipse方法相同,只是在最后增加两个用于指定弧线角度的Single类型的参数,以度为单位。第一个为起始角,从x轴到弧线的起始点沿顺时针方向度量的角;第二个为结束角,从起始角到弧线的结束点沿顺时针方向度量的角。
null下面代码用于绘制45度到270度之间的一段弧线。
1 Dim blackPen As New Pen(Color.Black, 3)
2 Dim rect As New Rectangle(100, 100, 200, 300)
3 Dim startAngle As Single = 45.0F
4 Dim sweepAngle As Single = 270.0F
5 e.Graphics.DrawArc(blackPen, rect, startAngle, sweepAngle)
nullDrawPie方法用于绘制一个扇形,该形状由一个坐标对、宽度、高度以及两条射线所指定的椭圆定义,其参数与DrawArc方法完全相同。
1 Dim blackPen As New Pen(Color.Black, 3)
2 Dim rect As New Rectangle(100, 100, 200, 300)
3 Dim startAngle As Single = 45.0F
4 Dim sweepAngle As Single = 270.0F
5 e.Graphics.DrawPie(blackPen, rect, startAngle, sweepAngle)
14.2.5 绘制填充对象14.2.5 绘制填充对象如果想要绘制纯色的或者带纹理的形状,则需要使用填充方法,如FillEllipse或者FillRectangle等。
填充方法使用Brush对象,它是可以绘制的另一种类型的图形对象。null下面的代码在窗体上绘制两个填充图形。Bushes类中包含了所有
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
颜色的画刷。
1 Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
2 e.Graphics.FillEllipse(Brushes.Red, 0, 0, 150, 150)
3 e.Graphics.FillRectangle(Brushes.Aquamarine, 31, 31, 148, 148)
4 End Sub