C#教程_第8章_图形图像处理

更新时间:2023-09-07 03:51:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

第8章 图形图像处理8.1 图形图像基础知识 8.2 绘制基本图形 8.3 填充图形 8.4 图像处理 图形与图像的平移、 8.5 图形与图像的平移、旋转与缩放 8.6 文字处理

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.1图形图像绘制基础知识 8.1图形图像绘制基础知识GDI+概述 8.1.1 GDI+概述 GDI+: (图形设备接口 图形设备接口) GDI+:Graphics Device Interface (图形设备接口),它提 供了高级图形图像处理功能。 供了高级图形图像处理功能。 C#中 在C#中,通过一套部署为托管代码的类来展现提供的图形图 像处理功能,这套类被称为GDI+的托管类。利用GDI+ GDI+的托管类 GDI+的托管 像处理功能,这套类被称为GDI+的托管类。利用GDI+的托管 类可以轻松实现颜色渐变、透明处理、纹理处理、 类可以轻松实现颜色渐变、透明处理、纹理处理、拉伸和缩 放等多种高级功能。 放等多种高级功能。 GDI+主要提供了三类服务 主要提供了三类服务: GDI+主要提供了三类服务: 1.二维矢量图形处理 1.二维矢量图形处理 2.二维图像处理 2.二维图像处理 3.文字显示 3.文字显示

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

GDI+概述 概述( 8.1.1 GDI+概述(续)在C#中,所有图形图像处理功能都包含在以下名称空间下: C#中 所有图形图像处理功能都包含在以下名称空间下: 1.System.Drawing名称空间 1.System.Drawing名称空间 提供了对GDI+基本图形功能的访问,主要有Graphics GDI+基本图形功能的访问 Graphics类 提供了对GDI+基本图形功能的访问,主要有Graphics类Bitmap Brush类继承的类 Font类 Icon类 Image类 Pen类 类继承的类、 类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、 Color类等 类等。 Color类等。 2.System.Drawing.Drawing2D名称空间 2.System.Drawing.Drawing2D名称空间 提供了高级的二维和矢量图形处理功能。主要有:梯度型画刷、 提供了高级的二维和矢量图形处理功能。主要有:梯度型画刷、 Matrix类 用于定义几何变换) GraphicsPath类等 类等。 Matrix类(用于定义几何变换)和GraphicsPath类等。 3.System.Drawing.Imaging名称空间 3.System.Drawing.Imaging名称空间 提供了高级图像处理功能。 提供了高级图像处理功能。 4.System.Drawing.Text名称空间 4.System.Drawing.Text名称空间 提供了高级字体和文本排版功能

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.1 .1

GDI+使用的坐标系 GDI+使用的坐标系

GDI+坐标系中的基本结构 1. GDI+坐标系中的基本结构 Point 表示某个特定位置相对于原点的水平和垂直距离。例如: 表示某个特定位置相对于原点的水平和垂直距离。例如: Point p = new Point (1,1); Size 也有两个整型属性来表示水平和垂直距离—Width和Height。 也有两个整型属性来表示水平和垂直距离—Width和Height。 例如: 例如:Size s = new Size (5,5); Rectangle 用来指定矩形的坐标,它由一个Point

和一个Size组成, Point和一个Size组成 用来指定矩形的坐标,它由一个Point和一个Size组成,其 Point表示矩形左上角 Size表示矩形大小 表示矩形左上角, 表示矩形大小。 中Point表示矩形左上角,Size表示矩形大小。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.1 .1例如: 例如:

GDI+使用的坐标系( GDI+使用的坐标系(续) 使用的坐标系

在构造函数中分别指定x坐标、 坐标、宽度和高度。 1) 在构造函数中分别指定x坐标、y坐标、宽度和高度。 Rectangle r1 = new Rectangle (1,2,5,6); 在构造函数中指定Point位置和Size结构。 Point位置和Size结构 2) 在构造函数中指定Point位置和Size结构。 Point p = new Point (1,2); Size s = new Size (5,6); Rectangle r2 = new Rectangle (p, s);

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.1 .1

GDI+使用的坐标系( GDI+使用的坐标系(续) 使用的坐标系

2.GDI+中坐标系的分类 GDI+中坐标系的分类 GDI+ 世界坐标系(World 世界坐标系(World coordinates) 是一种通用的坐标系,适用于任何计算机设备。 是一种通用的坐标系,适用于任何计算机设备。 设备坐标系(Device 设备坐标系(Device coordinates) 是指显示设备或打印设备使用的坐标系, 是指显示设备或打印设备使用的坐标系,它的特点是以设 备上的像素点为单位。 备上的像素点为单位。 页面坐标系(Page 页面坐标系(Page coordinates) 是指某种映射模式下的一种坐标系。 是指某种映射模式下的一种坐标系。 默认情况下,世界坐标系、 默认情况下,世界坐标系、设备坐标系和页面坐标系是 一致的。 一致的。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.1 .1

GDI+使用的坐标系( GDI+使用的坐标系(续) 使用的坐标系

3. 不同坐标系的转换 调用GDI+里的Graphics对象进行操作时, 调用GDI+里的Graphics对象进行操作时,输入的坐标为世 GDI+里的Graphics对象进行操作时 界坐标系中的坐标, 界坐标系中的坐标,而在屏幕或者打印机上显示的是设备坐 标系中的坐标。因此,每次输出时, 标系中的坐标。因此,每次输出时,系统都会自动进行两次 坐标变换——第一次是从世界坐标向页面坐标的世界变换(w ——第一次是从世界坐标向页面坐标的世界变换 坐标变换——第一次是从世界坐标向页面坐标的世界变换(w transformation), orld transformation),第二次是从页面坐标向设备坐标 的页面变换(page transformation)。 的页面变换(page transformation)。 在程序中,可以通过调用Graphics对象的TranslateTransf 在程序中,可以通过调用Graphics对象的TranslateTransf Graphics对象的 Graphics对象的 orm方法改变世界变换的原点, 方法改变世界变换的原点 orm方法改变世界变换的原点,通过设置 Graphics对象的 PageUnit属性改变页面变换的度量单位。 属性改变页面变换的度量单位 PageUnit属性改变页面变换的度量单位。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.

1 .1

GDI+使用的坐标系( GDI+使用的坐标系(续) 使用的坐标系

【例8-1 】不同坐标系之间的转换示例Form1_Paint(object private void Form1_Paint(object sender, PaintEventArgs e) Paint { Graphics myGraphics = e.Graphics; TranslateTransform(0.5F, myGraphics.TranslateTransform myGraphics.TranslateTransform(0.5F, 0.5F); myGraphics.PageUnit myGraphics.PageUnit = GraphicsUnit.Inch; Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX); myGraphics.DrawLine(myPen, 0, 0, 2, 2);1 2 X 1

}

上面的代码分别调用了Graphics对象的 上面的代码分别调用了Graphics对象的 Graphics 世界变换和页面变换, 世界变换和页面变换,使用英寸作为度量单 并让坐标系的原点距工作区左边缘0.5 位,并让坐标系的原点距工作区左边缘0.5 英寸、距工作区顶部0.5英寸,然后从(0,0) 0.5英寸 英寸、距工作区顶部0.5英寸,然后从(0,0) (2,2)绘制一条直线 右图为运行效图。 绘制一条直线。 到(2,2)绘制一条直线。右图为运行效图。

2 Y

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

Graphics类 8.1.2 Graphics类绘制图形图像前,首先必须创建Graphics对象, 绘制图形图像前,首先必须创建Graphics对象,然后利用 Graphics对象 这个对象绘制直线、曲线、椭圆等图形图像。 这个对象绘制直线、曲线、椭圆等图形图像。 有三种常见的创建Graphics对象的方法。 有三种常见的创建Graphics对象的方法。 Graphics对象的方法 1.在窗体或控件的Paint事件中获取Graphics对象。 1.在窗体或控件的Paint事件中获取Graphics对象。例 在窗体或控件的Paint事件中获取Graphics对象 如: Form1_Paint(…… ……) private void Form1_Paint(……) { Graphics g = e.Graphics; }

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

Graphics类 8.1.2 Graphics类(续)通过当前窗体的CreateGraphics 方法, 把当前窗体的画笔、 CreateGraphics方法 2. 通过当前窗体的 CreateGraphics 方法 , 把当前窗体的画笔 、 字体、 颜色作为默认值, 获取对Graphics 对象的引用。 Graphics对象的引用 字体 、 颜色作为默认值 , 获取对 Graphics 对象的引用 。 例 如: Graphics g = this.CreateGraphics(); …… 从继承自图像的任何对象创建Graphics对象,例如: Graphics对象 3. 从继承自图像的任何对象创建Graphics对象,例如: Bitmap(@"C:\mytest1\Pics\ Bitmap myBitmap = new Bitmap(@"C:\mytest1\Pics\m yPic.bmp"); Graphics g = Graphics.FromImage(myBitmap);

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.1.3 颜色颜色封装在System.Drawing.Color结构中。 颜色封装在System.Drawing.Color结构中。人眼可以分辨的 System.Drawing.Color结构中 任何颜色都是由一定的红、 蓝三色光组成。 任何颜色都是由一定的红、绿、蓝三色光组成。任何一种颜 色都可以有四个分量: 色都可以有四个分量: R:红色,取值范围0~255,0表示没有红色成分,255为饱和 红色,取值范围0~255, 表示没有红色成分,255为饱和 0~2

55 红色; 红色; G:绿色,取值范围0~255,0表示没有绿色成分,255为饱和 绿色,取值范围0~255, 表示没有绿色成分,255为饱和 0~255 绿色; 绿色; B:蓝色,取值范围0~255,0表示没有蓝色成分,255为饱和 蓝色,取值范围0~255, 表示没有蓝色成分,255为饱和 0~255 蓝色; 蓝色; A:Alpha值,即透明度,取值范围0~255,0表示完全透明, Alpha值 即透明度,取值范围0~255, 表示完全透明, 0~255 255表示完全不透明 表示完全不透明。 255表示完全不透明。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

颜色( 8.1.3 颜色(续)在代码中声明颜色的方式常用有两种: 在代码中声明颜色的方式常用有两种: 1.调用静态方法Color.FromArgb()指定任意颜色 调用静态方法Color.FromArgb()指定任意颜色, 1.调用静态方法Color.FromArgb()指定任意颜色,这种方法有 两种常用形式。 两种常用形式。 第一种形式为直接指定三种颜色,方法原型为: 第一种形式为直接指定三种颜色,方法原型为: Public static Color FromArgb (int red,int green,i blue); nt blue); 三个参数分别表示R 三色,Alpha值使用默认值255, 值使用默认值255 三个参数分别表示R、G、B三色,Alpha值使用默认值255, 即完全不透明。例如: 即完全不透明。例如: Color red = Color.FromArgb(255, 0, 0); 第二种形式为四个参数,方法原型为: 第二种形式为四个参数,方法原型为: Public static Color FromArgb (int alpha,int red,i blue); nt green, int blue); 四个参数分别表示透明度、 三色值。 四个参数分别表示透明度、R、G、B三色值。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.1.3 颜色(续) 颜色(2.系统预定义颜色 System.Drawing.Color结构中提供了许多静态性 结构中提供了许多静态性, System.Drawing.Color结构中提供了许多静态性,每个 属性返回一个命名颜色, Color结构中已经预定义了 结构中已经预定义了141 属性返回一个命名颜色 , 在 Color 结构中已经预定义了 141 种颜色,可以直接使用。例如: 种颜色,可以直接使用。例如: this.BackColor = Color.White;

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

Paint事件 8.1.4 Paint事件在C#程序中,最简单的方式就是在Paint事件中绘制图形图像, C#程序中,最简单的方式就是在Paint事件中绘制图形图像, 程序中 Paint事件中绘制图形图像 任何一个控件,包括窗体本身,系统都提供了对应的Paint Paint事 任何一个控件,包括窗体本身,系统都提供了对应的Paint事 件。 如果在控件的Paint事件中利用传递的参数获取Graphics对象, Paint事件中利用传递的参数获取Graphics对象 如果在控件的Paint事件中利用传递的参数获取Graphics对象, 则绘制的图形图像仅在该控件内显示。如果在窗体的Paint Paint事 则绘制的图形图像仅在该控件内显示。如果在窗体的Paint事 件中绘制,则绘

制的图形图像在该窗体内显示。 件中绘制,则绘制的图形图像在该窗体内显示。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.2 绘制基本图形8.2.1 创建画笔 画笔(Pen) 画笔(Pen) 画笔可用于绘制绘制具有指定宽度和样式的直线、 画笔可用于绘制绘制具有指定宽度和样式的直线、曲线或轮 廓形状。 廓形状。 下面的示例说明如何创建一支基本的蓝色画笔: 下面的示例说明如何创建一支基本的蓝色画笔: Pen(Color.Blue); Pen myPen = new Pen(Color.Blue); Pen(Color. 10. f); Pen myPen = new Pen(Color.Blue, 10.5f); 也可以从画刷对象创建画笔对象,例如: 也可以从画刷对象创建画笔对象,例如: SolidBrush(Color.Red); SolidBrush myBrush = new SolidBrush(Color.Red); Pen(myBrush); Pen myPen = new Pen(myBrush); Pen myPen = new Pen(myBrush, 5);

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.2.2 绘制直线所有绘制图形的方法都位于Graphics中 所有绘制图形的方法都位于Graphics中。 Graphics DrawLine方法 绘制一条直线,常用形式: 方法: DrawLine方法:绘制一条直线,常用形式: 绘制一条连接指定两个Point结构的线。 Point结构的线 1) 绘制一条连接指定两个Point结构的线。 public void DrawLine (Pen pen,Point pt1, Point pt2) 其中,Pen对象确定线条的颜色 宽度和样式; 对象确定线条的颜色、 其中,Pen对象确定线条的颜色、宽度和样式; Point结构确定起点和终点 结构确定起点和终点。 Point结构确定起点和终点。 绘制一条由坐标对指定的两个点的线。 2) 绘制一条由坐标对指定的两个点的线。 public void DrawLine (Pen pen,int x1, int y1,int x 2,int y2) 其中,Pen对象确定线条的颜色 宽度和样式; 对象确定线条的颜色、 其中,Pen对象确定线条的颜色、宽度和样式; x1,y1为起点坐标 x2,y2为终点坐标 为起点坐标, 为终点坐标。 x1,y1为起点坐标,x2,y2为终点坐标。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.2.2 绘制直线在.NET框架中,有一个LineCap枚举,该枚举用于指定系统预 .NET框架中,有一个LineCap枚举, 框架中 LineCap枚举 定义的线帽,例如圆形、方形、三角形、菱形、箭头等。 定义的线帽,例如圆形、方形、三角形、菱形、箭头等。 System.Drawing.Drawing2D命名空间下 有一个Adjustable 命名空间下, 在System.Drawing.Drawing2D命名空间下,有一个Adjustable ArrowCap类,利用该类可以自定义箭头线帽的形状。 ArrowCap类 利用该类可以自定义箭头线帽的形状。 AdjustableArrowCap(8, AdjustableArrowCap arrow = new AdjustableArrowCap(8, 10, false); Pen(Color.Blue Color.Blue, Pen myPen = new Pen(Color.Blue, 2); myPen.CustomEndCap = arrow; Graphics类提供的TranslateTransform方法可以帮助我们实现 类提供的TranslateTransform Graphics类提供的TranslateTransform方法可以帮助我们实现 平移坐标系的功能。 平移坐标系的功能。

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.2.2 绘制直线【

例8-1】用毫米作为度量单位,绘制一条数学上使用的坐标 用毫米作为度量单位, 即让坐标系的原点位于窗体中心,横向从左到右为x 轴,即让坐标系的原点位于窗体中心,横向从左到右为x正 方向,纵向从下到上为y轴正方向, 方向,纵向从下到上为y轴正方向,然后在此坐标系统下绘 制一条从(0,0)点到(20,20)的直线。 (0,0)点到(20,20)的直线 制一条从(0,0)点到(20,20)的直线。 运行效果如下: 运行效果如下:

选填,简要介绍文档的主要内容,方便文档被更多人浏览和下载。

8.2.2 绘制直线【例8-2】利用DrawLines方法和将根据正弦函数计算出来的 利用DrawLines方法和将根据正弦函数计算出来的 DrawLines 多个点之间用直线依次相连,构成正弦曲线显示出来。 多个点之间用直线依次相连,构成正弦曲线显示出来。 设计界面和运行界面如下: 设计界面和运行界面如下:

本文来源:https://www.bwwdw.com/article/d99h.html

Top