C#程序设计实用教程第09章

上传人:梦** 文档编号:59439800 上传时间:2018-11-07 格式:PPT 页数:36 大小:243.50KB
返回 下载 相关 举报
C#程序设计实用教程第09章_第1页
第1页 / 共36页
C#程序设计实用教程第09章_第2页
第2页 / 共36页
C#程序设计实用教程第09章_第3页
第3页 / 共36页
C#程序设计实用教程第09章_第4页
第4页 / 共36页
C#程序设计实用教程第09章_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《C#程序设计实用教程第09章》由会员分享,可在线阅读,更多相关《C#程序设计实用教程第09章(36页珍藏版)》请在金锄头文库上搜索。

1、第9章 GDI+,9.1 GDI+概述 GDI+是GDI(Graphics Device Interface,图形设备接口)的增强版本,它为Windows应用程序开发者提供了一组用于图形图像编程的类、结构和枚举。,9.2 C#的图形绘制结构和类 9.2.1 常用绘图结构 (1)Point与PointF结构 C#中定义的Point与PointF用来表示绘图平面上的一个点,与数学中平面上的点的含义相同,每个点有水平方向的x坐标及垂直方向的y坐标表示,其定义形式如下: (2)Size与SizeF结构 Size与SizeF结构使用Width及Height属性表示屏幕上的一个矩形区域的大小,例如: Si

2、ze s1=new Size(400,300);/表示宽400,高300的矩形区域; (3)Rectangle与RectangleF结构 Rectangle与RectangleF结构定义一个矩形区域,它有两种实例化方式: Rectangle(Point p,Size s); Rectangle(x,y,width,height);,命名空间,使用C#进行图形编程,是通过使用GDI+ 提供的一组类、结构和枚举进行的。 使用GDI+常用的命名空间: System.Drawing System.Drawing.Drawing2D 提供高级的二维和矢量图形功能,4,GDI+提供的4种服务:,.NET

3、Framework类库支持开发者完全地访问Windows GDI+。GDI+提供的服务大致可分为以下4种: GDI+提供了绘制简单图形和复杂图形的类。 GDI+允许开发者绘制各种字体的文本 GDI+允许开发者绘制位图和其他类型的图像。 GDI+提供图形变换功能,9.2.2 Graphics类,Syetem.Drawing命名空间中的Graphics类是绘图操作的核心,它封装了GDI+绘图界面,有3种基本类型的绘图界面,分别是: Windows和屏幕上的控件 要发送给打印机的页面 内存中的位图和图像,5,Grahpics类中常用的成员: DpiX/DpiY 返回图形设备水平/垂直分辨率 Draw

4、Arc DrawEllipse DrawImage DrawLine DrawPie,6,DrawPloygon DrawRectangle DrawString FillPie/FillPloygon/FillRectangle RotateTransform/ScaleTransform,要使用Graphics类执行绘图操作,首先要获得Graphics实例或创建Graphics实例. 3种方法: 1.通过windows窗体或控件的Paint事件来获的Graphics对象实例. Protected override void OnPaint(PaintEventArgs e) Graphic

5、s g=e. Graphics; ,2.使用Form类的CreateGraphics方法. Graphics g=this. CreateGraphics(); 注:该实例只在当前Windows窗体消息的过程有效.既在已经存在的窗体或控件中绘图,可用此种方法. 3.从继承自图像的任何对象创建Graphics对象. Bitmap images=new Bitmap(“1.bmp”); Graphics g= Graphics.FromImage(images);,9.2.3 Pen类。 在.NET框架中绘制图形要用到画笔,画笔用Pen类表示,在命名空间Syetem.Drawing中定义,用于绘制

6、各种直线和曲线,在GDI+中,Pen类封装了画笔的功能。画笔具有颜色和线宽等基本属性。 Pen redPen = new Pen(Color.Red, 1); Pen bluePen = new Pen(Color.Blue, 2); Pen greenPen = new Pen(Color.Green, 3); Pen blackPen = new Pen(Color.Black, 4); 上述代码中定义了四个画笔实例,其中第一个参数为画笔颜色,第二个参数表示画笔的线宽。所以定义的是红、蓝绿、黑四种颜色,线宽为1、2、3、4的四种画笔。,9.2.4 Brush类及Brush的派生类 在.NE

7、T框架中绘制图形要用到画刷,画刷用Brush类表示,画刷是一种用来填充区域的工具。在GDI+中,Brush是抽象基类,封装了画刷的基本功能,不能直接用它来创建画刷对象实例,而其功能在其派生类中实现。 Brush类有以下几种派生类,对应定义了几种画刷: SolidBrush(单色画刷)类 TextureBrush(纹理画刷)类 HatchBrush(阴影画刷)类 LinearGradientBrush(线性渐变)类 PathGradientBrush(渐变色效果) 实例化画刷类,如: SolidBrush mySolidBrush=new SolidBrush(Color.Blsck);,9.2

8、.5 Color类 颜色可以增强程序的表现力并有助于传递信息。在.NET框架中,使用值类型来表示一个RGB颜色(分别对应于Alpha值和红、绿、蓝三色)。在该类中提供了多种预定义的颜色,它们使用静态属性来表示。所以可以直接通过类名Color来引用,例如Color.Red表示红色。表9-1为常用的Color预定义颜色。,9.2.6 Font 类 窗体或控件对象中包含一个Font属性,表示窗体或控件的当前字体。创建窗体或控件时,这个属性会被系统赋予一个默认值。可以直接使用这个默认字体,也可以创建新的字体。 在GDI+中,字体使用Drawing.Font类来表示。通过创建这个类的一个新的实例可以创建

9、新的字体。创建字体时,需要指定字体的名称、大小、和风格。如果未指定风格,则创建常规字体。在.NET框架中,字体风格使用FontStyle枚举类型表示。,9.3绘制图形 (1)绘制直线(DrawLine方法) 使用Graphics中定义的DrawLine方法绘制直线,在由坐标对指定的两个点之间绘制一条直线。 (2)绘制矩形(DrawRectangle、DrawRectangles) 只需要指定矩形的起始点、高和宽即可,当然,不要忘记选择笔型。用DrawRectangels可以画出一组矩形来 (3)绘制圆和椭圆(DrawEllipse) (4)绘制文本(DrawString) 利用DrawStri

10、ng方法可以在图形表面上绘制一个文本字符串,可以指定文本内容、字体、画笔和文本的起始点等 (5)绘制圆弧(DrawArc) 其实这里能够绘制的不仅仅是圆弧,也可以是椭圆的一段弧。,Graphics类的画笔(Pen)用于绘制图形的外边界,而画刷(Brush)用于填充图形的内部。Graphics可用的填充方法很有限,我们只能填充特定的图形。 (1)FillEllipse方法 填充一个椭圆的内部。用法和DrawEllipse类似,只是注意Pen要改成Brush。 例:g.FillEllipse(blueBrush, 40.0f, 40.0f, 130.0f, 130.0f ); (3)FillPat

11、h方法 填充图形路径的内部。同前面DrawPath一样,也是需要先建立GraphicsPath类,将路径add进去,随后再调用FillPath填充。 (4 )FillPie方法 填充扇形区域。Arc本来就只有一条曲线,也就不存在填充了。 例:g.FillPie(new SolidBrush(Color.Red), 0.0f, 0.0f, 100, 60, 0.0f, 90.0f);,9.4 填充填充图形及Clear方法,(5)FillPolygon方法 填充多边形。此方法使用的参数有三个:画笔、点数组和填充模式。 例:g.FillPolygon(greenBrush, ptsArray); (

12、6)FillRectangle方法 填充矩形区域。 例:g.FillRectangle(new HatchBrush(HatchStyle.BackwardDiagonal, Color.Yellow, Color.Black), rect); (7)FillRegion方法 使用画笔填充指定的区域。 (8)Clear方法 清除整个绘图表面,并使用指定的背景色填充绘图表面,参数是一个Color类型的变量。清除窗体: g.Clear(this.BackColor); 传递该窗体的背景色;,9.5位图处理 在.NET框架中,使用Image类封装了基本的图像操作。该类是一个抽象基类,不能直接用其来创

13、建对象实例。它有两个子类,分别是Bitmap和Metafile。 Bitmap类封装了GDI+位图(.bmp文件格式),可以使用这个类来操作位图。创建位图实例时,可以指定位图文件的路径。这样,新创建的对象就会自动装载入位图,然后即可调用Graphics类的DrawImage方法显示位图。代码如下所示: Bitmap bmp=new Bitmap(“aa.jpeg”); This.CreateGraphics().DrawImage(bmp,new Point(50,50); 可以在显示图像时执行缩放操作,例如将位图缩放到指定的大小,其实现代码如下: Bitmap bmp=new Bitmap(

14、“aa.jpeg”); /在原点的位置上显示10*10大小的位图 This.CreateGraphics().DrawImage(bmp,0,0,50,50);,9.6坐标变换 在标是用来指明绘制图形对象的位置、大小、比例等特性的,在CDI+中,使用三个坐标空间:全局坐标、页面坐标和设备坐标。 全局坐标 程序代码使用的坐标。他是是一个相对坐标,没有单位。需要转化成绝对坐标,即定义单位后才能确定具体位置、长度等,如绘制长度为4的线段,对于相对坐标,则无法确定4到底是多长,只有定义单位后,如4毫米、4英寸、4个像素等,转化为绝对坐标后才能确定线段的长度。 页面坐标 虚拟的绘图平面使用的坐标,它是绝

15、对坐标,可以设置坐标单位。 设备坐标 输出设备实际使用的坐标。 三种坐标系统默认情况下是重合的,坐标原点都是(0,0),都位于绘制图形区域的左上角。坐标轴方向水平方向向右为正,垂直向向下为正。当进行了坐标变换后,三个坐标系统就可能不重合了。,9.7 Paint事件,Paint事件的代理类型为paintEventHandler, 他所使用的事件参数类型为PaintEventArges. 每次显示,更改大小,移动,最大化,还原或露出窗口时都会执行窗体的Paint事件.在该事件中将重新绘制窗体及其控件.,Paint事件,Protected override void OnPaint(PaintEve

16、ntArgs e) Graphics g=e. Graphics; ,例:时钟,1、指针类。 class Pointer protected Point ptStart; protected Point ptEnd; protected int length; protected Pen pen; / 无参的构造函数 public Pointer() this.ptStart = new Point(0, 0); this.ptEnd = new Point(0, 0); this.length = 0; this.pen = new Pen(Color.Red, 2); ,/ 有参数的构造函数 /ptStart:起点坐标 / ptEnd:终点坐标 /length:指针长度 /pen:画笔 public Pointer(Point ptStart, Point ptEnd, int length,Pen pen) this.ptStart = ptStart; this.ptEnd = ptEnd; this.length = len

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号