本文介绍了C#中的图形编程GDI,对大家的学习或工作有一定的参考价值。让我们和边肖一起学习。
编写图形程序时,需要使用GDI(GraphicsDeviceInterface)。从编程的角度来说,GDI包括两部分:一是GDI对象,二是GDI函数。GDI对象定义了GDI函数使用的工具和环境变量,GDI函数使用GDI对象绘制各种图形。在C#中,图形编程时使用GDI(图形界面加图形设备接口)的版本。GDI是GDI的进一步扩展,这使得我们的编程更加方便。
GDI+概述
GDI是继Windows2000之后,微软在操作系统中提供的一种新的图形设备接口。它通过一组部署为托管代码的类来表现,这些类被称为GDI的“托管类接口”。GDI主要提供以下三种类型的服务:
(1)二维矢量图形:GDI提供了存储图元自身信息的类(或结构),存储图元绘制模式信息的类,以及实际绘制的类。
(2)图像处理:大部分图片很难被定义为一组直线和曲线,无法用二维矢量图形进行处理。所以GDI为我们提供了位图、图像等类,可以用来显示、操作、保存BMP、JPG、GIF等图像格式。
(3)文本显示:GDI支持使用各种字体、字号和样式来显示文本。
编程图形,首先要讲解图形类,同时要掌握钢笔、画笔、矩形。相对于GDI有两个优点:第一,GDI通过提供新的功能(例如渐变画笔和alpha混合)扩展了GDI的功能;其次,修改了编程模型,使图形编程更容易、更灵活。
Graphics类
Graphics类封装了一个GDI绘图图面,并提供了一种将对象绘制到显示设备的方法。图形与特定的设备上下文相关联。绘图方法都包含在Graphics类中。当绘制任何对象(例如,圆、矩形)时,我们必须首先创建一个Graphics类的实例。这个实例相当于构建一个画布,用它我们可以用各种画图方法来画。
程序的设计过程一般分为两步:
(1)创建图形对象;(2)使用图形对象绘制、显示文本或处理图像。
我们通常使用以下三种方法来创建图形对象。
方法一、利用控件或窗体的Paint事件中的PainEventArgs在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs (PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。
例如:
//窗体的Paint事件的响应方法
privatevidform 1 _ Paint(object sender,PaintEventArgse)
{
Graphicsg=e . Graphics
}
还可以直接重载控件或窗体的OnPaint方法。具体代码如下:
protectedoverridevoidOnPaint(PaintEventArgse)
{
Graphicsg=e . Graphics
}
重绘控件时发生Paint事件。
方法二、调用某控件或窗体的CreateGraphics方法
调用控件或窗体的CreateGraphics方法以获取对Graphics对象的引用,该对象表示控件或窗体的绘图图面。如果要在现有窗体或控件上绘图,通常使用此方法。
例如:
Graphicsg=this。create graphics();
方法三、调用Graphics类的FromImage静态方法
从Image继承的任何对象创建一个Graphics对象。这种方法通常在需要更改现有图像时使用。
例如:
//名为“g1.jpg”的图片位于当前路径中
Imageimg=图像。from file(' G1 . jpg ');//创建一个图像对象
Graphicsg=图形。from image(img);//创建一个图形对象
Graphics类的方法成员
当你有了一个图形的对象引用后,你可以使用这个对象的成员来绘制各种图形。表1列出了Graphics类的公共方法成员。
名称绘制弧
画一个弧线。DrawBezier绘制三维贝尔瑟曲线。DrawBeziers绘制连续的三维Belser曲线。DrawClosedCurve绘制闭合曲线。绘制曲线。画椭圆画椭圆。绘制图像。绘制线绘制线。DrawPath通过路径绘制直线和曲线。DrawPie绘制一个饼形。DrawPolygon绘制多边形。画一个矩形。拉绳绘制文本。填充椭圆。FillPath填充路径。FillPie填充饼图。FillPolygon填充多边形。FillRectangle填充矩形。FillRectangles填充矩形组。FillRegion填充该区域。
英寸NET中,GDI的所有绘图功能都包含在System、System等命名空间中。绘图,系统。绘图。成像,系统。绘图。Darwing2D和系统。所以在开始使用GDI类之前,您需要引用相应的名称空间。
2引用命名空间
C#应用程序中的using命令已经使用了给定的命名空间或类。下面是一个引用命名空间的C#应用程序示例:
使用系统;
使用系统。集合。泛型;
使用系统。数据;
使用系统。组件模型;
使用系统。绘图;
使用系统。Drawing . Drawing2D
使用系统。绘图。成像;
常用画图对象
创建图形对象后,您可以使用它开始绘图、画线、填充图形和显示。
正文等。其中,使用的对象主要有:颜色:用于填充图案、颜色或位图。
钢笔:用于绘制线条和多边形,包括矩形、圆形和饼形。
字体:用于设置文本的字体格式。
画笔:用来描述颜色。
矩形:矩形结构通常用于在表单上绘制矩形。
点:描述一对有序的x和y坐标值。
1Pen类
钢笔用于绘制具有指定宽度和样式的直线。使用DashStyle属性绘制几条虚线。可以使用各种填充样式(包括纯色和纹理)来填充钢笔绘制的直线。填充模式取决于用作填充对象的笔刷或纹理。
使用画笔时,需要先实例化一个画笔对象。主要有以下几种方法。
使用指定的颜色实例化画笔,如下所示:
publicPen(彩色);
用指定的笔刷实例化一个笔刷,如下所示:
publicPen(画笔);
使用指定的笔刷和宽度实例化笔刷,如下所示:
publicPen(笔刷、浮动);
用指定的颜色和宽度实例化一个笔刷,如下所示:
publicPen(颜色,浮动);
实例化画笔的语句格式如下:
Penpn=newPen(Color。蓝色);
或者
Penpn=newPen(Color。蓝色,100);
钢笔的常用属性如下,如下表所示:
获取或设置画笔的对齐方式。获取或设置画笔的属性。获取或设置画笔的颜色。获取或设置画笔的宽度。
2.Color类
自然界中,颜色大多是由透明度(A)和三原色(R、G、B)组成的。在GDI中,颜色的定义是由颜色结构封装的。在颜色结构中,除了(A,R,G,B)之外,还提供了很多系统定义的颜色,比如粉色。此外,还为操作颜色提供了许多静态成员。颜色结构的基本属性如下表所示:
描述A获取这个颜色结构的alpha分量值,值为(0 ~ 255)。
r获取这个颜色结构的红色分量值,取值(0 ~ 255)。g获取这个颜色结构的绿色分量值,值为(0 ~ 255)。b获取这个颜色结构的蓝色分量值,值为(0 ~ 255)。Name获取此颜色结构的名称,它将返回用户定义的颜色或已知颜色的名称(如果该颜色是根据某个名称创建的),以及自定义颜色的RGB值。
下表显示了Color类的基本(静态)方法:
描述名称FromArgb从四个8位Argb分量值(阿尔法、红色、绿色和蓝色)创建一个颜色对象。从指定的预定义颜色创建一个颜色对象。FromName根据预定义颜色的指定名称创建颜色对象。
颜色类的对象可以由现有颜色构造,也可以由RGB创建,例如:
Colorclr1=颜色。FromArgb(122,25,255);
Colorclr2=颜色。FromKnowColor(KnowColor。棕色);//KnownColor是枚举类型。
Colorclr3=颜色。from name(' slate blue ');
在图像处理中,通常需要获取或设置像素的颜色值。获取图像像素颜色值的具体步骤如下:
(1)定义位图
BitmapmyBitmap=new bitmap(' c:\ \ my images \ \ testimage . BMP ');
(2)定义一个颜色变量,并将在指定位置获得的像素值存储在颜色变量中。
colorc=new color();
c=myBitmap。GetPixel(10,10);//获取该位图中指定像素的颜色。
(3)将颜色值分解成单色分量值
intr,g,b;
r=c . R
G=重心;
b=c . B
3.Font类
Font类定义了特定的文本格式,包括字体、字体大小和字形属性。Font类的常用构造函数是publicFont(string Font name,float font size,FontStyle),其中字号和字体可选,publicFont(string font name,float font size),其中“Font name”是FontFamily的字符串表示。以下是定义字体对象的示例代码:
font familyfontfamily=new font family(' Arial ');
Fontfont=newFont(fontFamily,16,FontStyle。常规,图形单位。像素);
下表显示了常见的字体属性:
说明粗体这个名字是否为粗体。字体字体成员。高度字体高度。斜体就是斜体。名称字体名称。字号字号。以磅为单位获取字体对象的字体大小。
Strikeout是否有删除线。样式字体类型。下划线是否加下划线。字体大小单位。
4.Brush类
Brush类是抽象基类,所以不能实例化。我们总是用它的派生类来实例化一个brush对象,当我们填充图形的内部时,我们将使用brush。
5.Rectangle类
存储一组四个整数,表示矩形的位置和大小。矩形结构通常用于在窗体上绘制矩形。除了使用其构造函数构造矩形对象之外,还可以使用rectangle结构的属性成员,其属性成员如下表所示:
解释底部底部坐标高度矩形高度IsEmpty测试矩形宽度和高度是否为0。
左矩形左坐标位置矩形的位置
右矩形右坐标
大小矩形大小
矩形宽度矩形宽度x顶点x矩形左上角的坐标
矩形左上角顶点的y坐标
Retangle结构有两个构造函数:
1.用指定的位置和大小初始化Rectangle类的新实例。
publicRetangle(点,大小);//Size结构存储一个有序的整数对,通常是矩形的宽度和高度。
2.用矩形的四个点的坐标初始化Rectangle类的新实例。
publicRectangle(int,int,int,int);
6.Point类
用指定的坐标初始化Point类的新实例。这个结构很像c中的Point结构,描述的是一对有序的x和y坐标值,其构造函数为:public point (intx,inty);其中x是点的水平位置;y是水在这一点的垂直位置。
以下是用于构造Point对象的示例代码:
Pointpt1=newPoint(30,30);
Pointpt2=newPoint(110,100);
关于C#图形编程GDI的这篇文章到此为止。希望对大家的学习有帮助,也希望大家多多支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。