15.2 图形编程
通过上面的章节了解了什么是GDI+,以及如何使用GDI+进行图形图像编程。在介绍了.NET Framework绘图类所需要的命名空间和方法后,就需要了解如何使用相应的命名空间和方法进行图形图像的绘制和处理。
15.2.1 Graphics类
Graphics类在GDI+的开发过程中非常重要,Graphics类封装了GDI+界面画图方法,以及图形显示设备,极大的简化了开发人员的编程过程。
1.Graphics类的属性
Graphics类的属性如下所示。
1)DpiX:获取对象的水平分辨率。
2)DpiY:获取对象的垂直分辨率。
3)IsClipEmpty:为对象指定裁剪区域。
4)IsVisibleClipEmpty;判断裁剪区域是否为空。
5)TextGammaValue:返回一个提供文本灰度值的信息的整数值。
6)TextRenderingHint:获取或设置与该图形相关联的文本着色模式。
通过Graphics类的属性能够获取Graphics对象的水平分辨率和垂直分辨率,并能够为Graphics对象进行裁剪区域的选择和判断。
2.Graphics类的方法
Graphics类提供的属性通常用于Graphics对象的信息获取,如果需要使用Graphics对象进行图形图像的绘制,则需要使用Graphics类提供的方法,Graphics类的部分方法如下所示。
1)Dispose:删除图形并释放已分配的内存。
2)DrawArc:绘制弧线。
3)DrawBezier:绘制后三次贝塞尔曲线。
4)DrawClosedCurve:绘制封闭曲线。
5)DrawCurve:绘制曲线。
6)DrawEllipse:绘制椭圆。
7)DrawIcon:绘制图标图像。
8)DrawIconUnstretched:绘制图标图像,并可将图像缩放到指定大小。
9)DrawImage:绘制图像。
10)DrawImageUnscaled:绘制图像,并可将图像缩放到指定大小。
11)DrawImageUnscaledAndClipped:在不进行缩放的情况下进行图像绘制。
12)DrawLine:绘制线条。
13)DrawLines:绘制一系列线条组。
14)DrawPath:绘制GraphicsPath。
15)DrawPie:绘制扇形。
16)DrawPolygon:绘制多边形。
17)DrawRectangle:绘制矩形。
18)DrawString:绘制字符串。
19)Equals:判断两个Object类型是否相同。
20)FillClosedCurve:填充封闭曲线的内部区域。
21)FillEllipse:填充椭圆内部。
22)FillPath:填充GraphicsPath内部。
23)FillPie:填充扇形内部。
24)GetHdc:获取图形上下文设备句柄。
25)Restore:恢复图形状态。
26)Save:保存图形。
27)SetClip:为对象设置剪辑区域。
Graphics类还包括其他方法提供对图形图像的绘制和处理进行编程,开发人员能够通过.NET Framework提供的Graphics类进行图形任何图形图像的编程。开发人员不仅能够可以绘制现有图形,还可以对图形进行渲染处理,这些渲染处理的效果能够应用到图形、文字和图表上。
15.2.2 绘制基本图形
通过使用Graphics类,开发人员能够绘制基本图形,这些基本图形包括线条、矩形、椭圆和多边形。
1.绘制线条
在上面的章节中讲解了如何进行线条的绘制,这里再进行简单的介绍,能够加深对Graphics类的理解,示例代码如下所示。
上述代码使用了DrawLine方法进行直线的绘制,其中DrawLine包括五个需要传递的参数,这五个此参数分别为起点的坐标和终点的坐标以及画笔。在上述代码中,图像大小为200*200,并在画布中从(0,0)坐标开始绘画到终点坐标为(200,200)的直线,绘制后的效果如图15-9所示。
图15-9 绘制线条形
2.绘制矩形
绘制矩形的方法同绘制线条基本相同,但是绘制矩形不仅要指定矩形的坐标,还需要指定矩形的高度和宽度,示例代码如下所示。
从上面的代码不难看出,绘制矩形的方法同绘制线条的方法基本相同,绘制矩形使用了DrawRectangle方法进行绘制,DrawRectangle方法同样包括五个参数,这五个参数同绘制线条有一点不同。绘制线条需要指定绘制过程中开始坐标和终点坐标,而绘制矩形时需要指定开始坐标,矩形的高度和宽度以及所需的画笔,示例代码如下所示。
上述代码绘制了一个矩形,其开始坐标为(200,200),并且高度和宽度都为50的矩形,运行后如图15-10所示。
图15-10 绘制矩形
3.绘制圆形和椭圆
绘制椭圆的方法只需要使用DrawEllipse方法即可,示例代码如下所示。
上述代码绘制了一个椭圆形,该椭圆形绘制的起点为(0,0),宽度为300,高度为200。DrawEllipse方法同DrawRectangle方法基本相同,因为这两个方法都包括五个参数,这5个参数都需要指定绘制起点、宽度和高度。当需要绘制圆形时,只需要将宽度和高度设置相等即可,示例代码如下所示。
当设置宽度和高度相等时,该椭圆就会以圆形呈现,上述代码就实现了圆形的绘制。
4.绘制多边形
绘制多边形的方法只需要使用DrawPolygon方法即可,与绘制规则图形不同的是,绘制多边形需要指定多边形的各个节点,DrawPolygon方法通过获取这些节点即可组成一个多边形,示例代码如下所示。
Point对象表示一个二维坐标中的一个点,通过Point的默认构造函数能够在二维坐标中指定一个点,示例代码如下所示。
定义了平面上的一个点之后,需要为多边形定义多个点,多个点能够组成一个多边形,这些点组成一个二维坐标的集合,示例代码如下所示。
Point[] pts = { pt1, pt2, pt3, pt4, pt5, pt6 }; //设置节点组
上述代码定义了一个Point类型的数组声明一个二维坐标的集合,通过DrawPolygon方法即可定义绘制多边形,示例代码如下所示。
5.绘制文字
通过使用DrawString方法能够绘制文字并呈现在图像中,示例代码如下所示。
使用DrawString方法,需要对DrawString方法进行参数传递,DrawString方法需要五个参数,其中包括需要输出的字符串、文本格式对象、笔刷对象以及文字开始绘制的坐标。上述代码中,输出字串为“我的字符串”。文本格式通过Font默认构造函数构造,并在坐标为(200,200)位置开始绘制。
15.2.3 图形绘制实例
上面一节讲解了如何分别绘制图形,使用相应的方法能够绘制相应的图形。.NET Framework为图形图像开发进行了封装,使用.NET Framework进行图形图像开发非常简单,下面绘制一些基本图形,并填充基本图形,示例代码如下所示。
上述代码分别绘制了直线、矩形、椭圆、文字和多边形,并填充了矩形,运行后如图15-11所示。
图15-11 图形绘制实例
正如图15-20所示,开发人员能够使用.NET Framework提供的绘图类进行基本图形的绘制,不仅如此,.NET Framework绘图类还提供了文字和图片的特效绘制方法。
15.2.1 Graphics类
Graphics类在GDI+的开发过程中非常重要,Graphics类封装了GDI+界面画图方法,以及图形显示设备,极大的简化了开发人员的编程过程。
1.Graphics类的属性
Graphics类的属性如下所示。
1)DpiX:获取对象的水平分辨率。
2)DpiY:获取对象的垂直分辨率。
3)IsClipEmpty:为对象指定裁剪区域。
4)IsVisibleClipEmpty;判断裁剪区域是否为空。
5)TextGammaValue:返回一个提供文本灰度值的信息的整数值。
6)TextRenderingHint:获取或设置与该图形相关联的文本着色模式。
通过Graphics类的属性能够获取Graphics对象的水平分辨率和垂直分辨率,并能够为Graphics对象进行裁剪区域的选择和判断。
2.Graphics类的方法
Graphics类提供的属性通常用于Graphics对象的信息获取,如果需要使用Graphics对象进行图形图像的绘制,则需要使用Graphics类提供的方法,Graphics类的部分方法如下所示。
1)Dispose:删除图形并释放已分配的内存。
2)DrawArc:绘制弧线。
3)DrawBezier:绘制后三次贝塞尔曲线。
4)DrawClosedCurve:绘制封闭曲线。
5)DrawCurve:绘制曲线。
6)DrawEllipse:绘制椭圆。
7)DrawIcon:绘制图标图像。
8)DrawIconUnstretched:绘制图标图像,并可将图像缩放到指定大小。
9)DrawImage:绘制图像。
10)DrawImageUnscaled:绘制图像,并可将图像缩放到指定大小。
11)DrawImageUnscaledAndClipped:在不进行缩放的情况下进行图像绘制。
12)DrawLine:绘制线条。
13)DrawLines:绘制一系列线条组。
14)DrawPath:绘制GraphicsPath。
15)DrawPie:绘制扇形。
16)DrawPolygon:绘制多边形。
17)DrawRectangle:绘制矩形。
18)DrawString:绘制字符串。
19)Equals:判断两个Object类型是否相同。
20)FillClosedCurve:填充封闭曲线的内部区域。
21)FillEllipse:填充椭圆内部。
22)FillPath:填充GraphicsPath内部。
23)FillPie:填充扇形内部。
24)GetHdc:获取图形上下文设备句柄。
25)Restore:恢复图形状态。
26)Save:保存图形。
27)SetClip:为对象设置剪辑区域。
Graphics类还包括其他方法提供对图形图像的绘制和处理进行编程,开发人员能够通过.NET Framework提供的Graphics类进行图形任何图形图像的编程。开发人员不仅能够可以绘制现有图形,还可以对图形进行渲染处理,这些渲染处理的效果能够应用到图形、文字和图表上。
15.2.2 绘制基本图形
通过使用Graphics类,开发人员能够绘制基本图形,这些基本图形包括线条、矩形、椭圆和多边形。
1.绘制线条
在上面的章节中讲解了如何进行线条的绘制,这里再进行简单的介绍,能够加深对Graphics类的理解,示例代码如下所示。
+展开
-C#
Bitmap images = new Bitmap(200, 200); //创建画纸
Graphics gr = Graphics.FromImage(images);//创建Graphics对象
Pen pen = new Pen(Color.Red, 5);//创建画笔
gr.Clear(Color.White);//设置画笔的颜色
gr.DrawLine(pen, 0, 0, 200, 200);//开始绘画
images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
gr.Dispose();//释放绘图对象
images.Dispose();//释放图形对象
Graphics gr = Graphics.FromImage(images);//创建Graphics对象
Pen pen = new Pen(Color.Red, 5);//创建画笔
gr.Clear(Color.White);//设置画笔的颜色
gr.DrawLine(pen, 0, 0, 200, 200);//开始绘画
images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
gr.Dispose();//释放绘图对象
images.Dispose();//释放图形对象
上述代码使用了DrawLine方法进行直线的绘制,其中DrawLine包括五个需要传递的参数,这五个此参数分别为起点的坐标和终点的坐标以及画笔。在上述代码中,图像大小为200*200,并在画布中从(0,0)坐标开始绘画到终点坐标为(200,200)的直线,绘制后的效果如图15-9所示。
图15-9 绘制线条形
2.绘制矩形
绘制矩形的方法同绘制线条基本相同,但是绘制矩形不仅要指定矩形的坐标,还需要指定矩形的高度和宽度,示例代码如下所示。
+展开
-C#
Bitmap images = new Bitmap(400, 400); //创建画纸
Graphics gr = Graphics.FromImage(images);//创建Graphics对象
Pen pen = new Pen(Color.Red, 5);//创建画笔
gr.Clear(Color.White);//设置画笔颜色
gr.DrawLine(pen, 0, 0, 200, 200);//绘制线条
gr.DrawRectangle(pen, 200, 200, 50, 50);//绘制矩形
images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
gr.Dispose();
images.Dispose();
Graphics gr = Graphics.FromImage(images);//创建Graphics对象
Pen pen = new Pen(Color.Red, 5);//创建画笔
gr.Clear(Color.White);//设置画笔颜色
gr.DrawLine(pen, 0, 0, 200, 200);//绘制线条
gr.DrawRectangle(pen, 200, 200, 50, 50);//绘制矩形
images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
gr.Dispose();
images.Dispose();
从上面的代码不难看出,绘制矩形的方法同绘制线条的方法基本相同,绘制矩形使用了DrawRectangle方法进行绘制,DrawRectangle方法同样包括五个参数,这五个参数同绘制线条有一点不同。绘制线条需要指定绘制过程中开始坐标和终点坐标,而绘制矩形时需要指定开始坐标,矩形的高度和宽度以及所需的画笔,示例代码如下所示。
+展开
-C#
gr.DrawRectangle(pen, 200, 200, 50, 50);//绘制矩形
上述代码绘制了一个矩形,其开始坐标为(200,200),并且高度和宽度都为50的矩形,运行后如图15-10所示。
图15-10 绘制矩形
3.绘制圆形和椭圆
绘制椭圆的方法只需要使用DrawEllipse方法即可,示例代码如下所示。
+展开
-C#
gr.DrawEllipse(pen, 0, 0, 300, 200);//绘制椭圆
上述代码绘制了一个椭圆形,该椭圆形绘制的起点为(0,0),宽度为300,高度为200。DrawEllipse方法同DrawRectangle方法基本相同,因为这两个方法都包括五个参数,这5个参数都需要指定绘制起点、宽度和高度。当需要绘制圆形时,只需要将宽度和高度设置相等即可,示例代码如下所示。
+展开
-C#
gr.DrawEllipse(pen, 0, 0, 200, 200);//绘制圆
当设置宽度和高度相等时,该椭圆就会以圆形呈现,上述代码就实现了圆形的绘制。
4.绘制多边形
绘制多边形的方法只需要使用DrawPolygon方法即可,与绘制规则图形不同的是,绘制多边形需要指定多边形的各个节点,DrawPolygon方法通过获取这些节点即可组成一个多边形,示例代码如下所示。
+展开
-C#
Point pt1 = new Point(50, 50);//设置节点
Point pt2 = new Point(150, 150); //设置节点
Point pt3 = new Point(200, 200); //设置节点
Point pt4 = new Point(350, 170); //设置节点
Point pt5 = new Point(90, 30);//设置节点
Point pt6 = new Point(180, 90); //设置节点
Point[] pts = { pt1, pt2, pt3, pt4, pt5, pt6 };//设置节点组
gr.DrawPolygon(pen, pts);//绘制多边形
Point pt2 = new Point(150, 150); //设置节点
Point pt3 = new Point(200, 200); //设置节点
Point pt4 = new Point(350, 170); //设置节点
Point pt5 = new Point(90, 30);//设置节点
Point pt6 = new Point(180, 90); //设置节点
Point[] pts = { pt1, pt2, pt3, pt4, pt5, pt6 };//设置节点组
gr.DrawPolygon(pen, pts);//绘制多边形
Point对象表示一个二维坐标中的一个点,通过Point的默认构造函数能够在二维坐标中指定一个点,示例代码如下所示。
+展开
-C#
Point pt1 = new Point(50, 50);//设置节点
定义了平面上的一个点之后,需要为多边形定义多个点,多个点能够组成一个多边形,这些点组成一个二维坐标的集合,示例代码如下所示。
Point[] pts = { pt1, pt2, pt3, pt4, pt5, pt6 }; //设置节点组
上述代码定义了一个Point类型的数组声明一个二维坐标的集合,通过DrawPolygon方法即可定义绘制多边形,示例代码如下所示。
+展开
-C#
gr.DrawPolygon(pen, pts);//绘制多边形
5.绘制文字
通过使用DrawString方法能够绘制文字并呈现在图像中,示例代码如下所示。
+展开
-C#
Font font = new Font("宋体", 20);//创建文字对象
Brush brush=new SolidBrush(Color.Red);//创建笔刷对象
gr.DrawString("我的字符串", font, brush, 200,200);//绘制文字
Brush brush=new SolidBrush(Color.Red);//创建笔刷对象
gr.DrawString("我的字符串", font, brush, 200,200);//绘制文字
使用DrawString方法,需要对DrawString方法进行参数传递,DrawString方法需要五个参数,其中包括需要输出的字符串、文本格式对象、笔刷对象以及文字开始绘制的坐标。上述代码中,输出字串为“我的字符串”。文本格式通过Font默认构造函数构造,并在坐标为(200,200)位置开始绘制。
15.2.3 图形绘制实例
上面一节讲解了如何分别绘制图形,使用相应的方法能够绘制相应的图形。.NET Framework为图形图像开发进行了封装,使用.NET Framework进行图形图像开发非常简单,下面绘制一些基本图形,并填充基本图形,示例代码如下所示。
+展开
-C#
protected void Page_Load(object sender, EventArgs e)
{
Bitmap images = new Bitmap(400, 400);//创建画纸
Graphics gr = Graphics.FromImage(images);//创建绘图类
Pen pen = new Pen(Color.Red, 5);//创建画笔
gr.Clear(Color.White);//绘制直线
gr.DrawLine(pen, 0, 0, 200, 200);//绘制矩形
gr.DrawRectangle(pen, 200, 200, 50, 50);//绘制椭圆
gr.DrawEllipse(pen, 0, 0, 300, 200); //绘制多边形
Point pt1 = new Point(50, 50);//设置节点
Point pt2 = new Point(150, 150); //设置节点
Point pt3 = new Point(200, 200); //设置节点
Point pt4 = new Point(350, 170); //设置节点
Point pt5 = new Point(90, 30);//设置节点
Point pt6 = new Point(180, 90); //设置节点
gr.DrawPolygon(pen, pts);//绘制文字
Font font = new Font("宋体", 20);//设置字体大小
Brush brush=new SolidBrush(Color.Red);//创建红色笔刷
gr.DrawString("我的字符串", font, brush, 200,200);//填充矩形
SolidBrush brush2 = new SolidBrush(Color.YellowGreen);
gr.FillRectangle(brush2,new Rectangle(100,100,100,100));//填充矩形
images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
gr.Dispose();
images.Dispose();
}
{
Bitmap images = new Bitmap(400, 400);//创建画纸
Graphics gr = Graphics.FromImage(images);//创建绘图类
Pen pen = new Pen(Color.Red, 5);//创建画笔
gr.Clear(Color.White);//绘制直线
gr.DrawLine(pen, 0, 0, 200, 200);//绘制矩形
gr.DrawRectangle(pen, 200, 200, 50, 50);//绘制椭圆
gr.DrawEllipse(pen, 0, 0, 300, 200); //绘制多边形
Point pt1 = new Point(50, 50);//设置节点
Point pt2 = new Point(150, 150); //设置节点
Point pt3 = new Point(200, 200); //设置节点
Point pt4 = new Point(350, 170); //设置节点
Point pt5 = new Point(90, 30);//设置节点
Point pt6 = new Point(180, 90); //设置节点
gr.DrawPolygon(pen, pts);//绘制文字
Font font = new Font("宋体", 20);//设置字体大小
Brush brush=new SolidBrush(Color.Red);//创建红色笔刷
gr.DrawString("我的字符串", font, brush, 200,200);//填充矩形
SolidBrush brush2 = new SolidBrush(Color.YellowGreen);
gr.FillRectangle(brush2,new Rectangle(100,100,100,100));//填充矩形
images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
gr.Dispose();
images.Dispose();
}
上述代码分别绘制了直线、矩形、椭圆、文字和多边形,并填充了矩形,运行后如图15-11所示。
图15-11 图形绘制实例
正如图15-20所示,开发人员能够使用.NET Framework提供的绘图类进行基本图形的绘制,不仅如此,.NET Framework绘图类还提供了文字和图片的特效绘制方法。
加支付宝好友偷能量挖...