C#第8章图形图像处理.ppt_第1页
C#第8章图形图像处理.ppt_第2页
C#第8章图形图像处理.ppt_第3页
C#第8章图形图像处理.ppt_第4页
C#第8章图形图像处理.ppt_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

1 第8章 图形图像处理 8.1 图形图像基础知识 8.2 绘制基本图形 8.3 填充图形 8.4 图像处理 8.5 图形与图像的平移、旋转与缩放 8.6 文字处理 2 本章综合举例 1.绘制柱状图、饼状图等图形。 举例1: 3 本章综合举例 举例2: 4 本章综合举例 2.使用鼠标绘制图形 举例: 5 本章综合举例 3.生成校验码 6 本章知识的其他应用 4.本章知识的典型应用 (1)绘制天气预报图 (2)绘制财务软件中各种类型的图。 (3)某些管理系统中的销售、库存等各种统计制图。 例如:某公司近两年来月收支结余走势图(单位:万元) 7 8.1图形图像绘制基础知识 GDI+简介 GDI+:Graphics Device Interface (图形设备接口),它提 供了高级图形图像处理功能。 从程序设计的角度看,GDI包括两部分:一部分是GDI对象, 另一部分是GDI函数。GDI对象定义了GDI函数使用的工具和环境 变量,而GDI函数使用GDI对象绘制各种图形。 在C#中,进行图形程序编写时用到的是GDI+,GDI+是GDI的进 一步扩展,它使编程更加方便。 GDI+是下一代Windows的绘图程序,将各种绘图功能井井有条 地封装在一个个的类中,以面向对象向应用程序提供绘图支持。 8 GDI+是微软在Windows 2000以后操作系统中提供的新的图 形设备接口,其在C#中,通过一套部署为托管代码的类来展现 提供的图形图像处理功能,这套类被称为GDI+的托管类。 利用GDI+的托管类可以轻松实现颜色渐变、透明处理、纹 理处理、拉伸和缩放等多种高级功能。 GDI+主要提供了三类服务: 1.二维矢量图形处理 2.二维图像处理 3.文字显示 8.1图形图像绘制基础知识 9 (1)二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构 体)、存储图形基元绘制方式信息的类以及实际进行绘制的类,如 Pen、Brush等等。 (2)图像处理:大多数图片都难以划定为直线和曲线的集合,无法使 用二维矢量图形方式进行处理。因此,GDI+为我们提供了Bitmap、 Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式 。 (3)文字显示:GDI+支持使用各种字体、字号和样式来显示文本。 8.1图形图像绘制基础知识 10 GDI+比GDI优越主要表现在两个方面: (一)GDI+通过提供新功能(例如:渐变画笔和alpha混合) 扩展了GDI的功能; (二)修订了编程模型,使图形编程更加简易灵活。 11 CRT 显示 打印机 打印 CRT 驱动程序 打印机 驱动程序 (GDI+) 图形 设备 环境 应 用 程 序 基类类 抽象类类 接口 子类类 具体类类 实现实现了接口 使用基类类的 属性、方法 编编程 12 8.1.1 GDI+概述(续) .NET框架提供的类 1.System.Drawing名称空间 提供了对GDI+基本图形功能的访问,主要有Graphics类Bitmap类、 从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类 等。 2.System.Drawing.Drawing2D名称空间 提供了高级的二维和矢量图形处理功能。主要有:梯度型画刷、Mat rix类(用于定义几何变换)和GraphicsPath类等。 3.System.Drawing.Imaging名称空间 提供了高级图像处理功能。 4.System.Drawing.Text名称空间 提供了高级字体和文本排版功能 13 8.1.1 GDI+概述(续) 基本结构 Point 表示某个特定位置相对于原点的水平和垂直距离。例如: Point p = new Point (1,1); Size 也有两个整型属性来表示水平和垂直距离Width和Height。 例如:Size s = new Size (5,5); Rectangle 用来指定矩形的坐标,它由一个Point和一个Size组成,其中 Point表示矩形左上角,Size表示矩形大小。 14 基本结构 Point 点结构Point和PointF表示某个特定位置相对于原点的水平和垂 直距离。 有两个成员:X,Y,表示x轴和y轴的坐标。 常用构造函数如下: Point p1 = new Point(int X,int Y);/X,Y为整数,表示在二 维平面中定义点的、整数 X 和 Y 坐标的有序对 。 PointF p2 = new PointF(float X,floa Y);/X,Y为浮点数 /float类型是为了支持坐标不是点距的单位 15 Size 结构Size和SizeF用来描述对象宽和高,有成员Width和Height 。 常用构造函数如下: /坐标系统可以转换,坐标单位可以不是点距 Size(int width,int height); /float类型是为了支持坐标不是点距的单位 /(例如单位为mm) SizeF(float width,float height); 基本结构 16 Rectangle 矩形结构Rectangle和RectangleF用来描述一个矩形, 常用属性和方法如下: 属性X、Y和只读属性Left、Top、Right和Bottom: 属性Width、Height和只读属性Size: 构造函数 Rectangle(Point location,Size size): Rectangle(int X,int Y,int width,int height): 基本结构 17 8.1.1 GDI+概述(续) 基本结构 例如: 1) 在构造函数中分别指定x坐标、y坐标、宽度和高度。 Rectangle r1 = new Rectangle (1,2,5,6); 2) 在构造函数中指定Point位置和Size结构。 Point p = new Point (1,2); Size s = new Size (5,6); Rectangle r2 = new Rectangle (p, s); 18 8.1.1 GDI+概述(续) 坐标系 默认情况下,坐标系的原点在绘图设备的左上角,x轴正 方向水平向右,y轴正方向水平垂直向下。 默认绘图单位为像素。也可以指定其他绘图单位。 19 Graphics对象是GDI+绘图中的核心对象。要使用计算机绘图 ,必须首先创建Graphics对象,然后利用这个对象绘制直线 、曲线、椭圆等图形图像。 绘图程序的一般步骤: (1)创建Graphics对象 (2)使用Graphics对象的方法绘图、显示文本或处理 图像。 通常用三种方法创建Graphics对象: 注意: Graphics类是密封类,不能有派生类。 8.1.1 GDI+概述(续) 20 8.1.2 Graphics类 三种常见的创建Graphics对象的方法。 1.在窗体或控件的Paint事件中获取Graphics对象。每一个 窗体或控件都有一个Paint事件,该事件的参数中包含了当 前窗体或控件的Graphics对象,在为窗体或控件创建绘制代 码时,一般使用此方法来获取对图形对象的引用。 例如:private void Form1_Paint() Graphics g = e.Graphics; 也可以重载窗体的OnPaint方法 protected override void OnPaint(PaintEventArgs e) Graphics g=e.Graphics; 21 8.1.2 Graphics类(续) 2.通过当前窗体的CreateGraphics方法,把当前窗体的画笔、 字体、颜色作为默认值,获取对Graphics对象的引用。注意 这种对象只有在处理当前Windows窗口消息的过程中有效。如 果想在已存在的窗体或控件上绘图,可以使用此方法。例如 : Graphics g = this.CreateGraphics(); 注意:此时以this所代表的窗体为画布,也可以使用其他控件 对象的引用,创建以控件对象为画布的Graphics对象。 22 3. 从继承自图像的任何对象创建Graphics对象,例如: Bitmap myBitmap = new Bitmap(“C:mytest1PicsmyPic.bmp“); Graphics g = Graphics.FromImage(myBitmap); l 此方法在需要更改已存在的图像时十分有用。 l 注意:此时以文件“myPic.bmp“为画布,使用g进行绘制图 形时,其图形是绘制在文件“myPic.bmp“” 上的。 8.1.1 GDI+概述(续) 23 8.1.3 颜色 颜色是进行图形操作的基本要素。颜色封装在 System.Drawing.Color结构中。人眼可以分辨的任何颜色都 是由一定的红、绿、蓝三色光组成。任何一种颜色都可以有 四个分量,每个分量占一个字节: R:红红色,取值值范围围0255,0表示没有红红色成分,255为饱为饱 和红红 色; G:绿绿色,取值值范围围0255,0表示没有绿绿色成分,255为饱为饱 和绿绿 色; B:蓝蓝色,取值值范围围0255,0表示没有蓝蓝色成分,255为饱为饱 和蓝蓝 色; A:Alpha值值,即透明度,取值值范围围0255,0表示完全透明,255 表示完全不透明。 24 8.1.3 颜色(续) 在代码中声明颜色的方式常用有两种: 1.调用静态方法Color.FromArgb()指定任意颜色,这种方法有两 种常用形式。 第一种形式为直接指定三种颜色,方法原型为: Public static Color FromArgb (int red,int green,int blue) ; 三个参数分别表示R、G、B三色,Alpha值使用默认值255,即完全 不透明。例如: Color red = Color.FromArgb(255, 0, 0); 第二种形式为四个参数,方法原型为: Public static Color FromArgb (int alpha,int red,int green, int blue); 四个参数分别表示透明度、R、G、B三色值。 25 8.1.3 颜色(续) 2.系统预定义颜色 System.Drawing.Color结构中提供了许多静态性,每个 属性返回一个命名颜色,在Color结构中已经预定义了141 种颜色,可以直接使用。例如: this.BackColor = Color.White; 26 【例】本例创建3个半透明的红、绿、蓝刷子,填充3个矩形,请 注意例子中透明度及颜色使用的方法。 private void Form1_Paint(object sender,PaintEventArgs e) Graphics g=e.Graphics; SolidBrush RedBrush=new SolidBrush (Color.FromArgb(128,255,0,0); /半透明,试试255 SolidBrush GreenBrush=new SolidBrush(Color.FromArgb(128,0,255,0); SolidBrush BlueBrush=new SolidBrush(Color.FromArgb(128,0,0,255); g.FillRectangle(RedBrush,0,0,80,80); g.FillRectangle(GreenBrush,40,0,80,80); g.FillRectangle(BlueBrush,20,20,80,80); 8.1.3 颜色(续) 27 8.1.4 Paint事件 任何一个控件(包括窗体),系统都提供了对应的Paint事件 。 如果在控件的Paint事件中利用传递的参数获取Graphics对象 ,则绘制的图形图像仅在该控件内显示。 在各种绘制命令中,坐标原点都是相对的。 例如 (1)在控件的Paint事件中绘制,控件的左上角为(0,0)点 。 (2)在窗体的Paint事件中绘制,(0,0)点在窗体的左上角 。 28 例:画一个边界为红色,内部填充为蓝色的圆 private void button1_Click(object sender,EventArgs e) /1、得到窗体使用的Graphics类对象方法1 Graphics g=this.CreateGraphics(); /2、创建红色的笔对象 Pen pen1=new Pen(Color.Red); /3、创建蓝色的刷子对象 SolidBrush brush1=new SolidBrush(Color.Blue); /4、用红色笔在窗体中画矩形内切圆的边界 g.DrawEllipse(pen1,10,10,100,100); /用蓝色刷子填充矩形内切圆的内部 g.FillEllipse(brush1,10,10,100,100); 使用Graphics类绘图的基本步骤 29 窗体的Paint事件 运行上例, 单击按钮,出现边界为红色,内部填充为蓝色的圆。 问题: 最小化后再最大化,图形消失! 原因: 这是因为当窗体被遮挡,操作系统不保存被被遮挡的内容。 而是由应用程序自己恢复被遮挡的用户区内容。 当被遮挡用户区内容恢复可见时,Windows操作系统向应用 程序发送Paint事件,我们只考虑用户区,窗体的标题、边框 由Windows负责。 Form类窗体不能自动响应Paint事件,程序员必须生成 Paint事件处理函数。 30 private void Form1_Paint(object sender,PaintEventArgs e) /得到窗体的使用的Graphics类对象方法2, Graphics g=e.Graphics; Pen pen1=new Pen(Color.Red); SolidBrush brush1=new SolidBrush(Color.Blue); g.DrawEllipse(pen1,10,10,100,100); g.FillEllipse(brush1,10,10,100,100); 运行后,出现边界为红色,内部填充蓝色的圆。 最小化后,再最大化,图形不消失。 31 在.NET中,GDI+的所有绘图功能都包括在System、 System.Drawing、System.Drawing.Imaging、 System.Drawing.Darwing2D和System.Drawing.Text等命名 空间中,因此在开始用GDI+类之前,需要先引用相应的命名 空间。 32 8.2 绘制基本图形 8.2.1 创建画笔 画笔:画笔是Pen类的实例,用于绘制各种基本图形。 下面的示例说明如何创建一支基本的蓝色画笔: Pen myPen = new Pen(Color.Blue); Pen myPen = new Pen(Color.Blue, 10.5f); 也可以从画刷对象创建画笔对象,例如: SolidBrush myBrush = new SolidBrush(Color.Red); Pen myPen = new Pen(myBrush); Pen myPen = new Pen(myBrush, 5); 创建画笔后,即可使用它来绘制直线、曲线或空心的轮 廓形状。还可以修改画笔的各种属性,例如使用【Width】属 性修改画笔的宽度; 33 8.2.2 绘制直线 所有绘制图形的方法都位于Graphics中。 1绘制直线的方法 DrawLine方法:绘制一条直线,常用形式: 1) 绘制一条连接指定两个Point结构的线。 public void DrawLine (Pen pen,Point pt1, Point pt2) 其中,Pen对象确定线条的颜色、宽度和样式; Point结构确定起点和终点。 2) 绘制一条由坐标对指定的两个点的线。 public void DrawLine (Pen pen,int x1,int y1,int x2,int y2) 其中,Pen对象确定线条的颜色、宽度和样式; x1,y1为起点坐标,x2,y2为终点坐标。 34 8.2.2 绘制直线 1绘制直线的方法(续) DrawLines方法的常用语法为 public void DrawLines (Pen pen, Point points) 其中,Pen对象确定线条的颜色、宽度和样式; 数组中的第一个点指定起始点,后面的每个点都以 相临的前一个点为起始点组成线段。 35 8.2.2 绘制直线 2定义画笔线帽 在.NET框架中,有一个LineCap枚举,该枚举用于指定系统预 定义的线帽,例如圆形、方形、三角形、菱形、箭头等。 在System.Drawing.Drawing2D命名空间下,有一个 AdjustableArrowCap类,利用该类可以自定义箭头线帽的形状 。 AdjustableArrowCap arrow = new AdjustableArrowCap(8, 10, false); Pen myPen = new Pen(Color.Blue, 2); myPen.CustomEndCap = arrow; 通过设置画笔的【CustomStartCap】属性或者【CustomEndCap 】属性来自定义画笔线帽的形状和大小。 36 8.2.2 绘制直线 3自定义坐标系 默认情况下 (1)屏幕坐标是以屏幕左上角为(0,0)点 (2)向右为x轴正方向,向下为y轴正方向。 坐标平移 Graphics类提供的TranslateTransform方法可实现坐标平 移。TranslateTransform方法的常用形式为 public void TranslateTransform (float dx,float dy) 其中,dx表示平移的x分量,dy表示平移的y分量。 37 8.2.2 绘制直线 【例8-1】用毫米作为度量单位,绘制一条数学上使用的坐标 轴,即让坐标系的原点位于窗体中心,横向从左到右为x正 方向,纵向从下到上为y轴正方向,然后在此坐标系统下绘 制一条从(0,0)点到(20,20)的直线。 运行效果如下: 38 8.2.2 绘制直线 【例8-2】利用DrawLines方法和将根据正弦函数计算出来的多 个点之间用直线依次相连,构成正弦曲线显示出来。 设计界面和运行界面如下: 39 8.2.3 矩形 绘制矩形的方法: (1)根据指定的矩形结构 public void DrawRectangle (Pen pen, Rectangle rect) (2)通过矩形的左上角坐标(x,y)和宽、高 public void DrawRectangle (Pen pen, int x, int y, int width, int height) (3)矩形数组rects来绘制多个矩形 public void DrawRectangles (Pen pen, Rectangle rects) 40 8.2.3 矩形 【例8-3】演示矩形的绘制方法。 运行效果如下: 41 8.2.4 多边形 多边形:是由3条或3条以上的边组成的闭合图形。 例如:三角形、矩形、五边形和六边形等都属于多边形。 DrawPolygon方法:绘制多边形的轮廓 DrawPolygon方法一般用于绘制多边形的轮廓,该方法常用 形式如下: public void DrawPolygon (Pen pen, Point points) 42 8.2.4 多边形 【例8-4】演示多边形的绘制方法。 设计界面和运行效果如下: 43 8.2.5 曲线 1. DrawCurve方法:用光滑的曲线把给定的点连接起来,常 用形式有: 1) public void DrawCurve (Pen pen ,Point points ) 其中,Point结构类型的数组中指明各节点,默认弯曲强度 为0.5。注意,数组中至少要有3个元素。 2) public void DrawCurve (Pen pen ,Point points, float tension ) 其中,tension指定弯曲强度,该值范围为0.0f-1.0f,超出 此范围会产生异常。当弯曲强度为零时,就是直线。 44 8.2.5 曲线(续) 2. DrawClosedCurve方法 通过连接数组中节点画一个平滑的曲线,此方法会自动把 首尾节点连接起来构成封闭曲线。注意数组中的节点至少要 有3个点组成,默认弯曲强度为0.5。 1) public void DrawClosedCurve (Pen pen , Point points ) 其中,Point结构类型的数组中指明各节点。 2) public void DrawClosedCurve (Pen pen ,Point points,float tension FillMode fillmode) 其中,fillmode指明曲线封闭区域内以何种方式填充。 45 8.2.5 曲线(续) 3. 贝塞尔曲线 每段贝塞尔曲线由4个点组成,两个端点(p1为起点,p2 为终点)和两个控制点(c1和c2)。曲线不经过控制点,但 是控制点如同一个磁体吸引曲线,影响并引导曲线向某个方 向拉伸。 46 8.2.5 曲线(续) 1) DrawBezier方法:绘制一段贝塞尔曲线的,常用形式: public void DrawBezier (Pen pen ,Point pt1, Point pt2,Point pt3,Point pt4 ) 其中pt1、pt2、pt3和pt4分别指定四个点。 2) DrawBeziers方法:绘制多段贝塞尔曲线,常用形式: public void DrawBezier (Pen pen ,Point points) 其中points是Point结构的数组,第一段贝塞尔曲线由 点数组中的第1-4个点绘制而成。以后每段曲线只需要3个 点:2个控制点和一个结束点。前一段曲线的结束点会自 动被用作后一段曲线的起始点。 47 8.2.5 曲线(续) 【例8-5 】绘制曲线示例。 48 8.2.6 绘制椭圆和扇形 1. 绘制椭圆(DrawEllipse方法) 1)给定椭圆左上角坐标和椭圆的外接矩形的宽度和高度 public void DrawEllipse(Pen pen, int x, int y, int width, int height); 其中, pen为Pen对象, x, y为椭圆外接矩形左上角的坐标, width定义椭圆外接矩形的宽度, height定义椭圆外接矩形的高度。 2)给定椭圆外接矩形的结构 public void DrawEllipse(Pen pen, Rectangle rect); 其中,rect为Rectangle结构,用于确定椭圆的边界。 49 8.2.6 绘制椭圆和扇形 2. 绘制扇形(DrawPie方法) 1) public void Drawpie(Pen pen, int x, int y, int width,int height,int startAngle,int sweepAngle); 其中, pen 为Pen对象, x, y为椭圆外接左上角的坐标, width 定义扇形外接矩形的宽度, height 定义扇形外接矩形的高度, startAngle 为起始角度(以度为单位), sweepAngle 为延伸角度。 2) public void DrawPie(Pen pen, Rectangle rect, float startAngle, float sweepAngle); 其中,rect为Rectangle结构,用于确定扇形的外接矩形。 50 8.2.6 绘制椭圆和扇形 【例8-6】演示椭圆和扇形的绘制方法。 运行效果如下: 51 8.3 填充图形 对于封闭的图形: 封闭图形包括矩形、椭圆、多边形、封闭的曲线、扇形等基 本图形。 1. Draw方法绘制 2. 以“Fill”为前缀的方法完成填充,例如: l与椭圆对应的填充方法为FillEllipse方法。 l与多边形对应的填充方法为FillPolygon方法等。 52 8.3.1 画刷(续) 画刷(Brush) 画刷是可以与Graphics对象一起使用来创建实心形状和呈现文本的 对象。可以用来填充各种图形形状,如矩形、椭圆、饼型图和多边 形等。下表列出了几种不同类型的画刷。 类说明 SolidBrush用纯色填充图形 LinearGradientBrush用颜色线性渐变填充图形 HatchBrush用各种图案填充图形 TextureBrush用基于光栅的图像(位图、JPG等)填充图形 PathGradientBrush用渐变效果填充图形路径 53 8.3.2 单色画刷 1)使用SolidBrush类定义单色画刷 SolidBrush类用于定义单色画刷。该类可以填充图形,比 如矩形、椭圆、多边形和路径。例如: SolidBrush solidBrush = new SolidBrush(Color.Red); Rectangle r = new Rectangle(5, 10, 100, 100); g.FillEllipse(solidBrush, r); 54 8.3.2 单色画刷 【例8-7】单色画刷演示示例。 运行结果如右图所示: 55 8.3.3 创建渐变画刷(续) 2)使用LinearGradientBrush类定义线性渐变 LinearGradientBrush对象用颜色线性渐变填充图形。提供了 三种构造函数: (1) 提供两个点和两种颜色。 Public LinearGradientBrush ( Point point1, Point point2, Color color1, Color color2) (2) 提供一个矩形和一个角度。 Public LinearGradientBrush (Rectangle rect ,Color color1,Color color2,float angle) (3) 指定渐变的模式。 Public LinearGradientBrush (Rectangle rect ,Color color1,Color color2, LinearGradientMode linearGradientMode) 56 8.3.3 渐变画刷(续) 【例8-8 】颜色渐变效果。 运行效果: 57 8.3.4 填充阴影 3)使用HatchBrush类填充简单图案 HatchBrush类提供的画刷可以用各种图案填充图形。通过 Hatch类型可以设置影线样式。在创建影线的画刷时,能设定前 景色、背景色和影线样式。有56种不同的影线样式枚举,该枚举 可以参看System.Drawing.Drawing2D.HatchStyle枚举。 例如: HatchStyle.Horizontal水平线的图案 HatchStyle.ForwardDiagonal从左上到右下的对角线的线条 图案 HatchStyle.DiagonalBrick 具有分层砖块外观的阴影 HatchStyle.Shingle 带有对角分层鹅卵石外观的阴影 HatchStyle.Sphere具有球体彼此相邻放置的外观的阴影 58 8.3.4 填充阴影 【例8-9】阴影效果示例。 效果如下: 59 8.3.5 填充纹理 4)使用TextureBrush类填充复杂图像 TextureBrush类使用图像作为填充的样式,它可以使用例如 .bmp、.jpg、.png等格式的图像。初始化一个新的 TextureBrush对象需要指定填充的图像。 l public TextureBrush (Image image, Rectangle rect) l public TextureBrush (Image image,WrapMode wrapMode, Rectangle rect) 其中,image指定要填充的图像; rect指定图像的矩形块; wrapMode指定如何填充图像,枚举类型 60 8.3.5 填充纹理 【例8-10】创建TextureBrush示例。 运行效果如下: 61 8.3.6 填充路径 5)使用PathGradientBrush类实现彩色渐变 1GraphicsPath类 GraphicsPath类用于创建路径。利用GraphicsPath类,可以绘 制形状的轮廓、填充形状内部和创建剪辑区域。下面的代码 创建一个路径并在路径中添加一个椭圆。 GraphicsPath path = new GraphicsPath(); path.AddEllipse(this.ClientRectangle); 2PathGradientBrush类 PathGradientBrush称为路径渐变画刷,路径渐变画刷用于从中 心向四周通过颜色渐变来填充路径的内部区域。 62 8.3.6 填充路径 【例8-11】路径和路径画刷的使用示例。 运行效果: 63 本章综合举例柱状图和饼状图绘制 柱状图实现要点 l确定柱子左上角顶点的坐标 l确定柱子的高度 l填充矩形柱子 饼状图实现要点 l确定每个部分所占的比例,以及相应的延伸角度 l从第一部分开始,顺时针绘制扇形 l填充扇形 64 第8章 图形图像处理 8.1 图形图像基础知识 8.2 绘制基本图形 8.3 填充图形 8.4 图像处理 8.5 图形与图像的平移、旋转与缩放 8.6 文字处理 65 8.4 图像处理 对图像的处理主要有: 从文件或其他地方加载图像或创建一个新的图像 显示图像 修改图像 把内存中的图像保存到文件和其他存储器中。 66 8.4.1 图像的绘制 1. 图像的显示 GDI+提供了两个类表示图像:Bitmap类和Metafile类。 Bitmap类:提供了处理位图的功能 Metafile类: 提供了处理矢量图的功能 显示步骤: 从文件中读取一个位图并在屏幕中显示图像需要三个步骤: 创建一个Bitmap对象指明要显示的图像文件; 创建一个Graphics对象表明要使用绘图平面; 通过调用Graphics对象的DrawImage方法显示图像。 67 8.4.1 图像的绘制 1) 创建Bitmap对象 Bitmap类有很多重载的构造函数,其中常用的有: Public Bitmap(string filename) 其中filename是图像文件的名字。可以利用该构造函数创建 Bitmap对象。例如: Bitmap bitmap = new Bitmap(“filename.jpg“); 2) DrawImage方法 Graphics类的DrawImage方法用于在指定位置显示原始图像或 者缩放后的图像。该方法的重载形式也非常多,其中常用的一种 为: Public void DrawImage(Image image,int x,int y,int width, int height) 该方法在(x,y)位置点按指定的大小显示图像。利用此方法可以使 由 image 对象表示的图像被缩放为 rect 矩形的尺寸。 68 8.4 .1 图像的绘制 【例8-12 】图像绘制功能。 运行效果: 69 8.4.2 图像的保存 在窗体上绘制出图形或图像后,利用Im

温馨提示

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

评论

0/150

提交评论