您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > NETGDI+图形图像编程教程
超全面的.NETGDI+图形图像编程教程GDI+绘图基础编写图形程序时需要使用GDI(GraphicsDeviceInterface,图形设备接口)。从程序设计的角度看,GDI包括两部分:GDI对象和GDI函数。GDI对象定义了GDI函数使用的工具和环境变量;而GDI函数使用GDI对象绘制各种图形。在C#中,进行图形程序编写时用到的是GDI+(GraphicsDeviceInterfacePlus,图形设备接口)版本,GDI+是GDI的进一步扩展,它使我们编程更加方便。1GDI+概述GDI+是微软在Windows2000以后操作系统中提供的新的图形设备接口,其通过一套部署为托管代码的类来实现,这套类被称为GDI+的“托管类接口”。GDI+主要提供了一下三类服务:1.二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。2.图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和奥村BMP、JPG、GIF等图像格式。3.文字显示:GDI+支持使用各种字体、字号和样式来显示文本。我们要进行图形编程,就必须先讲解Graphics类,同时我们还必须掌握Pen、Brush和Rectangle这几种类。GDI+比GDI优越主要表现在两个方面:1.GDI+通过提供新功能(例如:渐变画笔和Alpha混合)扩展了GDI的功能;2.修订了编程模型,是图形编程更加简易灵活。2Graphics类Graphics类封装一个GDI+绘图图面,提供将对象绘制到现实设备的方法,Graphics与特定的设备上下文关联。画图方法都被包括在Graphics类中国,在画任何对象(例如:CircleRectangle)时,我们首先要创建一个Graphics类实例,这个实例相当于建立了一块画布,有了画布才可以用各种画图方法进行绘图。绘图程序的设计过程一般分为两个步骤:1.创建Graphics;2.使用Graphics对象的方法绘图、显示文本或处理图像。通常我们使用下述三种方法来创建一个Graphics对象:方法一:利用控件或窗体的Paint事件中的PaintEventArgs在窗体或控件的Paint事件中接受对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。例如:创建Graphics对象的两种方法1.//窗体的Paint事件的响应方法2.privatevoidFrm_Demo_Paint(objectsender,PaintEventArgse)3.{4.Graphics_Graphics=e.Graphics;5.}6.7.//也可以直接重载控件或窗体的OnPaint方法8.protectedoverridevoidOnPaint(PaintEventArgse)9.{10.Graphics_Graphics=e.Graphics;11.}12.13.创建Graphics对象的两种方法Paint事件在重绘控件时发生。方法二:调用某控件或窗体的CreateGraphics方法调用某控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示该控件或窗体的绘图图面。如果想在已存在的窗体或控件上绘图,通常会使用此方法,例如:1.1Graphics_Graphics=this.CreateGraphics();//在当前窗体上创建Graphics对象方法三:调用Graphics类的FromImage静态方法由从Image集成的任何对象创建Graphics对象。在需要更改已存在的图像时,通常会使用此方法。例如:使用Graphics.FromImage()方法创建Graphics对象1.Imageimg=Image.FromFile(孤影.jpg);//建立Image对象2.Graphics_Graphics=Graphics.FromImage(img);//创建Graphics对象2.1Graphics类的方法成员有了一个Graphics的对象引用后,就可以利用该对象的成员进行各种各样图形的绘制,下面表格列出了Graphics类的常用方法成员:Graphics类常用方法成员名称说明名称说明DrawArc画弧DrawBezier画立体的贝尔塞曲线DrawBeziers画连续立体的贝尔塞曲线DrawClosedCurve画闭合曲线DrawCurve画曲线DrawEllipse画椭圆DrawImage画图像DrawLine画线DrawPath通过路径画线和曲线DrawPie画饼形DrawPolygon画多边形DrawRectangle画矩形DrawString绘制文字FillEllipse填充椭圆FillPath填充路径FillPie填充饼图FillPolygon填充多边形FillRectangle填充矩形FillRectangles填充矩形组FillRegion填充区域在.NET中,GDI+的所有绘图功能都包括在System、System.Drawimg、System.Drawimg.Imaging、System.Drawimg.Drawimg2D和System.Drawimg.Text等命名空间中,因此开始用GDI+类之前,需要先引用相应的命名空间。2.2引用命名空间在C#应用程序中使用using命令引用给定的命名空间或类,下面是一个C#应用程序引用命名空间的例子:引用命名空间1.usingSystem;2.usingSystem.Collections.Generic;3.usingSystem.Data;4.usingSystem.ComponentModel;5.usingSystem.Drawing;6.usingSystem.Drawing.Drawing2D;7.usingSystem.Drawing.Imaging;8.9.引用命名空间3常用画图对象在创建了Graphics对象后,就可以用它开始绘图了,可以画线、填充图形、显示文本等等,其中主要用到的对象还有:Pen:用来用patterns、colors或者bitmaps进行填充Color:用来画线和多边形,包括矩形、圆和饼形Font:用来给文字设置字体格式Brush:用来描述颜色Rectangle:矩形结构通常用来在窗体上画矩形Point:描述一对有序的x,y两个坐标值3.1Pen类Pen类用来绘制指定宽度和样式的直线。使用DashStyle属性绘制几种虚线,可以使用各种各样填充样式(包括纯色和纹理)来填充Pen绘制的直线,填充模式取决于画笔或用作填充对象的纹理。使用画笔时,需要先实例化一个画笔对象,主要有以下几种方法:实例化画笔对象1.//用指定的颜色实例化一只画笔2.publicPen(Color);3.4.//用指定的画刷实例化一只画笔5.publicPen(Brush);6.7.//用指定的画刷和宽度实例化一只画笔8.publicPen(Brush,float);9.10.//用指定的颜色和宽度实例化一只画笔11.publicPen(Color,float);12.13.//实例化画笔格式如下:14.Penpen=newPen(Color.Blue);15.//或者:16.Penpen=newPen(Color.Blue,100);17.18.实例化画笔对象Pen常用的属性如下:Pen常用属性名称说明名称说明Alignment获得或者设置画笔的对齐方式Brush获得或者设置画笔的属性Color获得或者设置画笔的颜色Width获得或者设置画笔的宽度3.2Color结构在自然界中,颜色大都由透明度(A)和三基色(R,G,B)所组成。在GDI+中,通过Color结构封装对颜色的定义,Color结构中,除了提供(A,R,G,B)以外,还提供许多系统定义的颜色,如Pink(粉色)。另外,还提供许多静态成员,用户对颜色进行操作。Color结构的基本属性如下表:颜色的基本属性名称说明A获取此Color结构的Alpha分量值,取值(0~255)R获取此Color结构的红色分量值,取值(0~255)G获取此Color结构的绿色分量值,取值(0~255)B获取此Color结构的蓝色分量值,取值(0~255)Name获取此Color结构的名称,这将返回用户定义的颜色的名称或已知颜色的名称(如果该颜色是从某个名称创建的)。对于自定义的颜色,这将返回RGB值。Color结构的基本(静态)方法如下表:颜色的基本方法名称说明FromArgb从四个8位的ARGB分量(Alpha、红色、绿色和蓝色)值创建Color结构FromKnowColor从指定饿预定义颜色创建一个Color结构FromName从预定义颜色的指定名称创建一个Color结构。Color结构变量可以通过已有颜色构造,也可以通过RGB建立,例如:创建Color构造对象1.Colorcolor1=Color.FromArgb(96,06,25);2.Colorcolor2=Color.FromKnownColor(KnownColor.Blue);//KnowColor为枚举类型3.Colorcolor3=Color.FromName(LightBlue);在图像处理中一般需要获取或设置像素的颜色值,获取一幅图像的某个像素颜色值得具体步骤如下:1.定义Bitmap1.Bitmapbitmap=newBitmap(D:\\孤影\\LonelyShadow.bmp);2.定义一个颜色变量,把在指定位置所取得的像素值存入颜色变量中1.Colorcolor=newColor();2.color=bitmap.GetPixel(10,10);//获取此Bitmap中指定像素的颜色3.将颜色值分解出单色分量值1.intr,g,b;2.r=color.R;3.g=color.G;4.b=color.B;3.3Font类Font类定义特定文本格式,包括字体、字号和字形属性。Font类的常用构造函数是:publicFont(string字体名,float字号,FontStyle字形){}其中字号和字体为可选项publicFont(string字体名,float字号)其中字体名为Font的FontFamily的字符串表示形式下面是定义一个F哦你团队相爱难过的示例代码:1.FontFamilyfontFamily=newFontFamily(Arial);2.Fontfont=newFont(fontFamily,16,FontStyle.Regular,GraphicsUnit.Pixel);字体常用属性如下表:字体的常用属性名称说明名称说明Bold是否为粗体FontFamily字体成员Height字体高Italic是否为斜体Name字体名称Size字体尺寸SizeInPoints获取此Font对象的字号,以磅为单位Strikeout是否有删除线Style字体类型UnderlineUnitUnit字体尺寸单位3.4Brush类Brush类是一个抽象的基类,因此它不能被实例化,我们总是用它的派生类进行实例化一个画刷的对象,当我们对图形内部进行填充操作时就会用到画刷,关于画刷在[1.5]中有详细的讲解。3.5Rectangle结构存储一组整数,共四个,表示一个矩形的位置和大小。矩形结构通常用来在窗体上画矩形,除了利用它的构造函数矩形对象外,还可以利用Rectangle结构的属性成员,其属性成员如下表:Rectangle结构属性名称说明名称索命Bottom底端坐标Height矩形高IsEmpty测试矩形宽和高是否为0Left矩形左边坐标Location矩形的位置Right矩形右边坐标Size矩形尺寸Top矩形顶端坐标Width矩形宽X矩形左上角顶点X坐
本文标题:NETGDI+图形图像编程教程
链接地址:https://www.777doc.com/doc-2883884 .html