资源描述:
《C sharp图形图像编程基础》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第7章C#图形图像编程基础本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础、C#图像处理基础以及简单的图像处理技术。7.1GDI+绘图基础7.2C#图像处理基础7.1GDI+绘图基础编写图形程序时需要使用GDI(GraphicsDeviceInterface,图形设备接口),从程序设计的角度看,GDI包括两部分:一部分是GDI对象,另一部分是GDI函数。GDI对象定义了GDI函数使用的工具和环境变量,而GDI函数使用GDI对象绘制各种图形,在C#中,进行图形程序编写时用到的是GDI+(Graph
2、icsDeviceInterfacePlus)版本,GDI+是GDI的进一步扩展,它使编程更加方便。7.1.1GDI+概述GDI+是微软在Windows2000以后操作系统中提供的新的图形设备接口,其通过一套部署为托管代码的类来展现,这套类被称为GDI+的“托管类接口”,GDI+主要提供了以下三类服务:(1)二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。(2)图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因
3、此,GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式。(3)文字显示:GDI+支持使用各种字体、字号和样式来显示文本。7.1.2Graphics类Graphics类封装了一个GDI+绘图图面,提供将对象绘制到显示到设备的方法。绘图程序的一般步骤:(1)创建Graphics对象(2)使用Graphics对象的方法绘图、显示文本或处理图像。通常用三种方法创建Graphics对象:方法一//窗体的Paint事件的响应方法privatevoidform1_Pai
4、nt(objectsender,PaintEventArgse){Graphicsg=e.Graphics;}也可以重载窗体的OnPaint方法protectedoverridevoidOnPaint(PaintEventArgse){Graphicsg=e.Graphics;}方法二调用控件或窗体的CreateGraphics方法。例如:Graphicsg=this.CreateGraphics();注意:此时以this所代表的窗体为画布,也可以使用其他控件对象的引用,创建以控件对象为画布的Graphics对象
5、。方法三//建立Image对象,名为“g1.jpg”的图片位于当前路径下Imageimg=Image.FromFile("g1.jpg");//创建Graphics对象Graphicsg=Graphics.FromImage(img);注意:此时以文件“g1.jpg”为画布,使用g进行绘制图形时,其图形是绘制在文件“g1.jpg”上的。在创建了Graphics对象后,就可以用它开始绘图了,可以画线、填充图形、显示文本等等,其中主要用到的对象还有:Pen:定义用于绘制直线和曲线的对象。Color:表示ARGB颜色。
6、Font:定义特定的文本格式,包括字体、字号和字形属性。Brush:定义用于填充图形形状(如矩形、椭圆、饼形、多边形和封闭路径)的内部的对象。Rectangle:存储一组整数,共四个,表示一个矩形的位置和大小。Point:表示在二维平面中定义点的、整数X和Y坐标的有序对。注意:各个对象的构造函数。7.1.3常用画图对象Color对象在自然界中,颜色大都由透明度(A)和三基色(R,G,B)所组成。在GDI+中,通过Color结构封装对颜色的定义,Color结构中,除了提供(A,R,G,B)以外,还提供许多系统定义的
7、颜色,如Pink(粉颜色),另外,还提供许多静态成员,用于对颜色进行操作。Colorred=Color.FromArgb(255,0,0);Colorred=Color.FromArgb(120,255,0,0));1.画一个矩形protectedoverridevoidOnPaint(PaintEventArgse){Graphicsg=e.Graphics;Rectanglerect=newRectangle(50,30,100,100);LinearGradientBrushlBrush=newLinear
8、GradientBrush(rect,Color.Red,Color.Yellow,LinearGradientMode.BackwardDiagonal);g.FillRectangle(lBrush,rect);}7.1.4基本图形绘制举例2.画一个弧protectedoverridevoidOnPaint(PaintEventArgse){Graphicsg=e.G