第十章图形处理.doc_第1页
第十章图形处理.doc_第2页
第十章图形处理.doc_第3页
第十章图形处理.doc_第4页
第十章图形处理.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章 图形处理教学目标:通过本章的学习,使学生掌握VB.NET绘图的基础知识,能够灵活运用GDI+提供的功能绘制自定义图形。教学类型:利用多媒体手段直观讲授,引导学生熟悉图形的处理,掌握图形程序设计的一般方法和步骤。教学内容:VB.NET的GDI (Graphics Device Interface图形设备接口)提供了强大的绘图功能,是微软公司为程序员提供的针对Windows平台的新一代二维图形系统。它的完全面向对象的特征和优良设计在保证高效率的同时,也为程序员绘制各种各样的图形和显示图像提供了简单易用的接口。10.1 绘图的基础知识一、GDI+概述GDI+是对“图形设备接口(GDI)”的一个扩展,是一套特殊的“应用程序编程接口(API)”。它所提供的类可用于创建二维矢量图形(“矢量”是创建图形的一种高性能技术)、操纵字体以及插入图像。GDI+在扩展GDI 的同时,还简化了编程模型并添加了一些新特性,比如图形路径、扩展的图像文件支持以及alpha 混合等等。使用GDI+API,程序员可以灵活地创建图像,不必关心图形硬件和运行平台的细节。二、相关类分布的命令空间GDI+在System.Drawing.Dll程序集中定义,它的相关类都分布在以下命令空间。System.Drawing:提供了对 GDI+ 基本图形功能的访问。System.Drawing2D:提供高级的二维和矢量图形功能。System Imaging :提供高级 GDI+ 图像处理功能。System.Drawing.Text:允许用户创建和使用多种字体。三、GDI+的坐标系统所谓“坐标系统”是对屏幕上的每个点进行标识的一种方案。GUI组件(比如Panel 或Form )左上角的坐标默认为(0 , 0),一对坐标同时含有x坐标(水平坐标)和y坐标(垂直坐标)。x 坐标是距离左上角的水平距离(朝右),y 坐标是距离左上角的垂直距离(向下)。我们要指定( x , y)坐标,以便将文本和图形定位在屏幕上。坐标单位是像素( 图形元素),即显示器能分辨的最小单元。不同显示器可能采用不同分辫率,所以像素在这些显示器上的密度是不同的,这可能导致图形大小在不同显示器上有所区别。10.2 用GDI+绘图 Graphics类封装了GDI+的绘图画板,是GDI+绘图的核心类。创建Graphics对象,然后才可以使用GDI+绘制线条和形状、呈现文本或显示与操作图像。处理图形包括以下两个步骤: (1)创建Graphics对象。 (2)使用Graphics 对象绘制线条和形状、呈现文本或显示与操作图像。一、创建Graphics 对象 Graphics 类提供将对象绘制到显示设备的方法,它与特定的设备上下文关联。1Paint 事件处理程序中的PaintEventArgs在窗体或控件的 Paint 事件中接收对图形对象的引用,作为 PaintEventArgs 的一部分。 在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。要获取对Paint事件的PaintEventArgs中Graphics对象的引用 ,需要完成以下步骤:(1) 声明Graphics对象。(2) 分配变量来引用作为PaintEventArgs的一部分传递的Graphics 对象。(3) 插入代码来绘制窗体或控件。例10-1:演示如何从Paint事件中的PaintEventArgs引用Graphics 对象。2CreateGraphics 方法通过调用从 System.Windows.Forms.Control 继承的对象的 Control.CreateGraphics 方法来实现。调用某控件或窗体的CreateGraphics方法来获取对Graphics 对象的引用,该对象表示该控件或窗体的绘图表面。如果想在已存在的窗体或控件上绘图,则可使用此方法。例如: Dim g as Graphics gMe.CreateGraphics3从Image 对象创建从继承来自“图像”的任何对象创建Graphics 对象,此方法在用户需要更改已存在的图像时十分有用。可以从Image类派生的任何对象创建Graphics对象,为此需要调用Graphics.FormImage方法,并提供要从其中创建Graphics对象的Image变量的名称。例10-2 :演示了如何使用Bitmap对象二、绘制和操作图形Graphics 对象在创建后,可用于绘制线条和形状、呈现文本或显示与操作图像。与Graphics对象一起使用的用户对象有以下几种:(1) Pen类:用于绘制线条、勾勒形状轮廓或呈现其他几何表示形式。(2) Brush类:用指定的颜色、样式、纹理来填充封闭的图形。(3) Font 类:提供有关在显示文本时要使用的样式说明。(4) Color结构:用来描述对象的颜色和透明度。用GDI+绘制图形,先获取图形对象的引用,然后创建Pen用于轮廓的描绘或Brush用于封闭图形的填充,然后再绘制各种形状的图形。1创建Graphics 对象例如VB.NET包含一个对Buttonl图形对象的引用,则可定义如下:Dim g as Graphics=Buttonl.CreateGraphics2用Pen绘制图形Pen 对象存储要绘制项的颜色、宽度和线型属性,将 Pen 对象作为参数之一传递给绘制方法。例如,演示 DrawRectangle 方法的一个变体接收一个 Pen 对象和四个整数,并绘制一个宽 100、高 50 且左上角位于 (20, 10) 的矩形:创建用于绘制线条的Pen 类的实例,设置所有相应的属性等。 3用brush填充图形Pen对象定义了封闭图形的轮廓线的属性,而图形内部属性可以用Brush类来定义。GDI+提供了几个笔刷来填充内部轮廓,几种填充形式都是Brush类的派生类。(1) 用单色填充图形SolidBrush类是一个单色填充类,其功能是用一种颜色填充图形,因此该类只有一种属性,即Color(颜色)属性。创建一个SolidBrush 对象,然后将SolidBrush对象传送给图形对象中的一个填充方法的参数。例10-3:用红色填充一个椭圆(2) 用hatch模式填充图形HatchBruh类是用阴影样式、前景色和背景色填充,有 54 种不同的阴影样式,前景色定义线条的颜色,背景色定义各线条之间间隙的颜色,格式如下:HatchBrush (HatchStyle, Color) 使用指定的 HatchStyle 枚举和前景色填充 HatchBrush (HatchStyle, Color,Color)使用指定的 HatchStyle 枚举、前景和背景色填充背景色:绘制的阴影线条之间的空间的颜色 前景色:绘制的阴影线条的颜色 填充样式:绘制的阴影样式Hatchstyle参数可以是Hatchstyle 枚举类型的任何值。在枚举类型中有50多个元素,例如:Horizontal 水平线的图案 Cross 交叉的水平线和垂直线Vertical 垂直线的图案 DashedHorizontal 虚线水平线等等例10-4:用hatch 模式填充一个椭圆 (3) 用图像填充图形 TextureBrush 类的功能是用一个图像填充图形,该类需要一个图像对象作参考,用Image和TextureBrush 类填充一个封闭的图形。格式如下:TextureBrush (Image) 用指定的图像更新 TextureBrush 对象 TextureBrush (Image, Rectangle) 用指定的图像和边框填充TextureBrush (Image, WrapMode) 用指定的图像和自动换行模式填充TextureBrush (Image, Rectangle, ImageAttributes) 用指定图像、边框和图像属性填充 TextureBrush (Image, WrapMode, Rectangle) 用指定图像、自动换行模式和边框填充参数说明如下:WrapMode:指定图像填充区域时的平铺方式,枚举值如下:Clamp 没有平铺 Tile 平铺图像 TileFlipX 水平反转图像,然后平铺该图像 TileFlipXY 水平和垂直反转图像,然后平铺该图像 TileFlipY 垂直反转图像,然后平铺该图像 例10-5:用一个图像平铺并渐变填充一个椭圆例10-6:不同类型的平铺效果:(参见ppt) (4) 用直线形颜色渐变填充图形 利用直线形颜色渐变改变色彩,GDI+提供了水平、垂直、对角直线形渐变样式。所有渐变都是沿由矩形的宽度或两个点指定的直线定义的。默认情况下,双色渐变是沿指定直线从起始色到结束色的均匀水平线性混合。具体格式如下:LinearGradientBrush (Point, Point, Color1, Color2) 使用指定的点和颜色渐变填充 LinearGradientBrush(Rectangle,Color1,Color2, LinearGradientMode) 根据矩形、起始颜色和结束颜色以及方向渐变填充 LinearGradientBrush (Rectangle, Color1, Color2, angle) 根据矩形、起始颜色和结束颜色以及方向角度渐变填充 其中参数含义为:Rectangle 指定线性渐变的界限 Color1 表示渐变起始色Color2 表示渐变结束色angle 渐变方向线的角度(从 X 轴以顺时针角度计算)linearGradientMode 指定渐变方向,渐变方向决定渐变的起点和终点。取值为:BackwardDiagonal 指定从右上到左下的渐变 ForwardDiagonal 指定从左上到右下的渐变 Horizontal 指定从左到右的渐变 Vertical 指定从上到下的渐变例10-7:用渐变填充图形。例10-8:用直线渐变填充一条直线、一个椭圆和一个矩形 (5) 用路径颜色渐变填充图形 pathGradientBrush类可以为一个路径的中部指定一种颜色,为路径的边缘指定另一种颜色,也可以为沿路径的边缘几个点中的每一个点分别指定颜色。在GDI+中,一个路径是一系列直线和由Graphics 对象维持的曲线组成。例10-9 :利用在边界上指定的点来填充。由星形轨迹构造路径渐变画笔,将星形中心的颜色设置为红色,然后在 points 数组中的各个点处指定不同的颜色(存储在 colors 数组中)。最后一条语句用路径渐变画笔填充星形轨迹在边缘指定的点10.3 颜色控制在GDI+中用Color 结构定义处理颜色的方法和常量,颜色是一个32 位的值,由红色、绿色、蓝色及通道组成。每种颜色及通道各占8 位,取值范围是0255 之间的整数值,这些值结合起来可以定义某种具体的颜色。通道代表颜色的透明度,即颜色被背景色混合的程度。颜色的RGB 值和背景色的RGB值产生一种加权混合效果,其取值在0255 之间变化,O 代表全透明,255 代表全不透明。通道混合是背景色和源色一个像素一个像素地混合,源色中的3 个元素(红色、绿色和监色)各自根据下面的公式和背景色中相应元素混合。 显示色源色 alpha255 背景色(255 alpha ) / 255 例如,假定源色中的红色成分是150 ,背景色中的红色成分是100,如果通道值是200, 那么结果颜色中的红色成分计算如下:150200/255+100(255-200)/255=139,其他分量以此类推。 颜色的创建可以利用Color结构的FromArgb方法完成,FromArgb方法是基于四个 8 位 ARGB 分量(alpha、红色、绿色和蓝色)值创建 Color 结构的。格式如下: Color.FromArgb (Int32) Color.FromArgb (Alpha, Color) Color.FromArgb (Red, Green, Blue) Color.FromArgb (Alpha, Red, Green, Blue) 含义是: 从一个 32 位ARGB值创建 Color 结构。32 位 ARGB 值的字节顺序为 AARRGGBB,AA 表示alpha 分量值。 RR、GG 和 BB 分别表示红色、绿色和蓝色颜色分量值。 从指定的 Color 结构创建 Color 结构,使用指定的 alpha 值。 从指定的 8 位颜色值(红色、绿色和蓝色)创建 Color 结构。alpha 值默认为 255(完全不透明)。 从四个 ARGB 分量值创建 Color 结构。1用不透明和半透明的直线绘制图形要绘制一条不透明的直线,将颜色的通道值设为255; 要绘制一条半透明的直线,将通道值设为从1254 中的任何值。当在背景上绘制半透明的直线时,直线的颜色和背景的颜色混合在一起。通道值接近O 的以背景色为主,接近255 的以直线色为主。例10-10 :绘制一个位图,然后将位图作为背景在上面绘制一条直线。第一条直线通道值为255,不透明 。第二条通道值为128,看上去是半透明的,可以通过直线看到背景。2用合成模式控制通道混合 创建一个脱离屏幕的位图,该位图有如下特征:颜色的通道值不到255 。当创建位图时彼此间没有颜色混合。 当显示完成的位图时,位图中的颜色在显示设备上和背景色通过通道混合在一起。 常用的Graphics 对象的混合模式为CompositingMode,用来指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论