第四章图形、图像与多媒体

上传人:cn****1 文档编号:587504690 上传时间:2024-09-06 格式:PPT 页数:54 大小:497.04KB
返回 下载 相关 举报
第四章图形、图像与多媒体_第1页
第1页 / 共54页
第四章图形、图像与多媒体_第2页
第2页 / 共54页
第四章图形、图像与多媒体_第3页
第3页 / 共54页
第四章图形、图像与多媒体_第4页
第4页 / 共54页
第四章图形、图像与多媒体_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《第四章图形、图像与多媒体》由会员分享,可在线阅读,更多相关《第四章图形、图像与多媒体(54页珍藏版)》请在金锄头文库上搜索。

1、C#程序设计与案例教程 清华大学出版社 第四章第四章 图形、图像与多媒体图形、图像与多媒体图形图像及多媒体处理也是C#的重要应用。.NET框架通过封装GDI+实现了图形图像的处理功能。利用C#可以开发出强大的图形、图像与多媒体程序。 1 1版权所有版权所有C#程序设计与案例教程 清华大学出版社 目录n nGDI+GDI+概述概述n nGDI+GDI+绘图基础绘图基础n n基本的绘图方法基本的绘图方法 n n图像的显示与处理图像的显示与处理n n声音与视频的播放声音与视频的播放2 2版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.1 GDI+概述概述n n早期的早期的WindowWi

2、ndow程序中,可以使用程序中,可以使用GDIGDI(Graphics Device Interface Graphics Device Interface ,图形设备,图形设备接口)在一个窗体中绘制图形、文本和图像,接口)在一个窗体中绘制图形、文本和图像,但它的功能有限。但它的功能有限。GDI+GDI+是是GDIGDI的一个新版本,的一个新版本,它不仅在它不仅在GDIGDI基础上添加许多新特性,而且对基础上添加许多新特性,而且对原有的原有的GDIGDI功能进行优化,并在为开发人员提功能进行优化,并在为开发人员提供的二维矢量图形、文本、图像处理、区域、供的二维矢量图形、文本、图像处理、区域、路

3、径以及图形数据矩阵等方面构造了一系列相路径以及图形数据矩阵等方面构造了一系列相关的类。其中,图形类关的类。其中,图形类GraphicsGraphics是是GDI+GDI+接口中接口中的一个核心类,许多绘图操作都可用它完成。的一个核心类,许多绘图操作都可用它完成。3 3版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.1.1 GDI+命名空间n n GDI+GDI+包含大约包含大约6060个类、个类、5050个枚举和个枚举和8 8个结构。个结构。所有的函数都保存在所有的函数都保存在System.Drwaing.dllSystem.Drwaing.dll程序程序集中。集中。 4 4版权所

4、有版权所有C#程序设计与案例教程 清华大学出版社 4.1.2 基本数据结构n n在绘图操作中,常常需要使用在绘图操作中,常常需要使用PointPoint(点)、(点)、SizeSize(大小)和(大小)和RectangleRectangle(矩形)等简单的数(矩形)等简单的数据结构。据结构。5 5版权所有版权所有C#程序设计与案例教程 清华大学出版社 1 1PointPoint、SizeSize和和和和RectangleRectangle结构的构造函数结构的构造函数结构的构造函数结构的构造函数(1 1)PointPoint用来表示平面上的点或一个位置(用来表示平面上的点或一个位置(x,yx,y

5、),其属性有),其属性有X X和和Y Y。Point(intPoint(int dwdw) ):dwdw的低的低1616位指定水平坐标,高位指定水平坐标,高1616位指定垂直坐标。位指定垂直坐标。Point(SizePoint(Size szsz) ):szsz的宽度的宽度WidthWidth和高度和高度HeightHeight用来指定用来指定PointPoint的的X X和和Y Y的值。的值。 Point(intPoint(int x,intx,int y); y);(2 2)SizeSize结构常用来表示一个矩形的大小,其属性有结构常用来表示一个矩形的大小,其属性有WidthWidth和和

6、HeightHeight。Size(PointSize(Point pt) pt):ptpt的的X X和和Y Y属性用来指定属性用来指定SizeSize的的WidthWidth和和HeightHeight。Size(intSize(int width,intwidth,int height) height);(3 3)RectangleRectangle结构用来表示一个矩形的位置和大小,其属性有结构用来表示一个矩形的位置和大小,其属性有X X、Y Y、WidthWidth、HeightHeight、LocationLocation、LeftLeft、RightRight、TopTop、Bott

7、omBottom。Rectangle(intRectangle(int x,intx,int y,inty,int width,intwidth,int height); height);Rectangle(PointRectangle(Point locaton,Sizelocaton,Size size); size); 6 6版权所有版权所有C#程序设计与案例教程 清华大学出版社 2. 2. 基本运算符操作基本运算符操作基本运算符操作基本运算符操作 Point Point、SizeSize和和ReactangleReactangle类结构重载了常用的运算符操作类结构重载了常用的运算符操作

8、,如,如PointPoint和和SizeSize结构的结构的+ +、- -、=、!=!=操作,操作,RectangleRectangle结结构的构的=、!=!=操作等。这里只介绍操作等。这里只介绍PointPoint和和SizeSize结构的结构的+ +和和- -操作。操作。(1 1)“ “+”+”操作操作 若向若向PointPoint对象加上一个对象加上一个SizeSize对象,则返回对象,则返回PointPoint对象。例对象。例如:如:Drawing.PointDrawing.Point pt=Drawing.Point(25,-18)+Drawing(10,5); pt=Drawing

9、.Point(25,-18)+Drawing(10,5);则结果为则结果为Point(35,-13)Point(35,-13)。若向。若向SizeSize对象加上一个对象加上一个SizeSize对象,则是它们对象,则是它们的宽度和高度相加。的宽度和高度相加。(2 2)“ “-” -”操作操作若向若向PointPoint对象减去一个对象减去一个SizeSize对象,则返回对象,则返回PointPoint对象。例如:对象。例如:Drawing.PointDrawing.Point pt=Drawing.Point(25,-19)+Drawing(15,5); pt=Drawing.Point(25

10、,-19)+Drawing(15,5); 7 7版权所有版权所有C#程序设计与案例教程 清华大学出版社 3 3RectangleRectangle结构的常用操作结构的常用操作结构的常用操作结构的常用操作(1 1)扩大和缩小)扩大和缩小 使用使用InflateInflate方法。方法。n nvoid void Inflate(SizeInflate(Size size) size)n nvoid void Inflate(intInflate(int widht,intwidht,int height); height);(2 2)相交和合并)相交和合并 成员方法成员方法IniersectIni

11、ersect和和UnionUnion分别用来将两个矩形进分别用来将两个矩形进行相交和合并。行相交和合并。n nvoid void Intersect(RectangleIntersect(Rectangle rectrect) )n nstatic Rectangle static Rectangle Intersect(RectangleIntersect(Rectangle a,Rectanglea,Rectangle b); b);n nstatic Rectangle static Rectangle Union(RectangleUnion(Rectangle a,Rectangle

12、a,Rectangle b); b); 8 8版权所有版权所有C#程序设计与案例教程 清华大学出版社 (3)移动 OffsetOffset方法用来调整矩形的位置。方法用来调整矩形的位置。n nvoid void Offset(PointOffset(Point pos); pos);n nvoid void Offset(intOffset(int x,intx,int y); y);(4)测试和判断n nIntersectsWithIntersectsWith方法用来判断是否和指定的矩形方法用来判断是否和指定的矩形相交。若有相交,则返回相交。若有相交,则返回truetrue,否则返回,否则返

13、回falsefalse。boolbool IntersectWidth(RectangleIntersectWidth(Rectangle rectrect); );9 9版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.1.3 处理图形图像的步骤n n处理图形包括两个步骤:创建处理图形包括两个步骤:创建Graphics Graphics 对象;对象;使用使用Graphics Graphics 对象绘制线条和形状、呈现文本对象绘制线条和形状、呈现文本或显示与操作图像。或显示与操作图像。 1010版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.2 GDI+绘图基础 4.2.

14、1 坐标系统 1 1全局坐标、页面坐标和设备坐标全局坐标、页面坐标和设备坐标全局坐标、页面坐标和设备坐标全局坐标、页面坐标和设备坐标 2 2GrahpicsGrahpics与坐标系统有关的成员与坐标系统有关的成员与坐标系统有关的成员与坐标系统有关的成员 3 3全局变换全局变换全局变换全局变换 全局坐标到页面坐标的坐标变换叫做全局变换,全局坐标到页面坐标的坐标变换叫做全局变换,保存在保存在GraphicsGraphics类的类的TransformTransform属性中。主要包属性中。主要包含两种变换:平移、旋转、比例。含两种变换:平移、旋转、比例。1111版权所有版权所有C#程序设计与案例教程

15、 清华大学出版社 4页面变换页面变换n n页面坐标的原点总是在虚拟绘图平面的左上角。页面坐标的原点总是在虚拟绘图平面的左上角。由于页面坐标标度量单位是像素,所以设备坐由于页面坐标标度量单位是像素,所以设备坐标与页面坐标是相同的。但如果将页面坐标改标与页面坐标是相同的。但如果将页面坐标改成其他的单位(如英寸),两者就不同了。这成其他的单位(如英寸),两者就不同了。这时发生页面坐标到设备坐标的变换称为页面变时发生页面坐标到设备坐标的变换称为页面变换。换。GraphicsGraphics类的类的PageUnitPageUnit和和PageScalePageScale两个两个属性提供页面变换操作。属性

16、提供页面变换操作。 1212版权所有版权所有C#程序设计与案例教程 清华大学出版社 【案例案例案例案例4-14-1】建立坐标系建立坐标系并画圆。并画圆。n n设计一个坐标系,坐标设计一个坐标系,坐标原点在窗体的中心,单原点在窗体的中心,单位为英才,位为英才,X X轴向右为轴向右为正,正,Y Y轴向上为正,画轴向上为正,画出坐标轴,在此坐标系出坐标轴,在此坐标系绘制一个圆,圆心在坐绘制一个圆,圆心在坐标圆点,半径为标圆点,半径为1 1英寸。英寸。 1313版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.2.2 画笔n n画笔是绘制各种直线和曲线的一种图形工具,画笔是绘制各种直线和曲线

17、的一种图形工具,它主要有线型、颜色和线宽属性。默认的线宽它主要有线型、颜色和线宽属性。默认的线宽为为1 1个像素,线型为实线。个像素,线型为实线。 1414版权所有版权所有C#程序设计与案例教程 清华大学出版社 1 1建立建立建立建立PenPen对象对象对象对象(1 1)直接使用)直接使用PenPen类构造函数。常用下面的三种重载形类构造函数。常用下面的三种重载形式:式:public public Pen(ColorPen(Color c) c):创建某一种颜色的:创建某一种颜色的PenPen对象。对象。public public Pen(ColorPen(Color c,floatc,flo

18、at w) w):创建某一种颜色和相应宽度:创建某一种颜色和相应宽度的的PenPen对象。对象。public public Pen(BrushPen(Brush b) b):创建某一刷子样式的:创建某一刷子样式的PenPen对象。对象。public public Pen(BrushPen(Brush b,floatb,float w) w):创建某一刷子样式并具有:创建某一刷子样式并具有相应宽度的相应宽度的PenPen对象。对象。1515版权所有版权所有C#程序设计与案例教程 清华大学出版社 (2 2)从)从SystemPensSystemPens和和PensPens类获取类获取PenPen对

19、象的引对象的引用。用。System.Drawing.SystemPensSystem.Drawing.SystemPens类用于创建类用于创建与用户界面单位和系统颜色相匹配的笔。该类与用户界面单位和系统颜色相匹配的笔。该类的每一个共享属性都返回一个的每一个共享属性都返回一个PenPen对象的引用。对象的引用。例如:例如:Pen Pen pepe= =SystemPens.HighlightTextSystemPens.HighlightText;/;/画笔使用选画笔使用选定项的文本颜色。定项的文本颜色。1616版权所有版权所有C#程序设计与案例教程 清华大学出版社 2Pen的常用属性的常用属性

20、n nBrushBrush属性。获取或设置用于确定此属性。获取或设置用于确定此PenPen对象的对象的属性的属性的BrushBrush对象。对象。 n nColorColor属性。获取或设置此属性。获取或设置此PenPen对象的颜色。对象的颜色。 n nWidthWidth属性。获取或设置此属性。获取或设置此PenPen对象的宽度。对象的宽度。n nDashStyleDashStyle属性。获取或设置用于通过此属性。获取或设置用于通过此Pen Pen 对象绘制的虚线的样式。对象绘制的虚线的样式。n nDashCapDashCap属性。获取或设置用在短划线终点的属性。获取或设置用在短划线终点的帽

21、样式,帽样式,Drawing2D.DashCapDrawing2D.DashCap枚举值枚举值 。 1717版权所有版权所有C#程序设计与案例教程 清华大学出版社 n nEndCapEndCap属性。获取或设置用在通过此属性。获取或设置用在通过此 Pen Pen 对对象绘制的直线终点的帽样式。取象绘制的直线终点的帽样式。取Drawing2D.LineCapDrawing2D.LineCap枚举值,如表枚举值,如表4-44-4所示。所示。n nStartCapStartCap属性。获取或设置用在通过此属性。获取或设置用在通过此 Pen Pen 对对象绘制的直线起点的帽样式。取象绘制的直线起点的帽

22、样式。取Drawing2D.LineCapDrawing2D.LineCap枚举值,如表枚举值,如表4-44-4所示。所示。n nLineJoinLineJoin属性。获取或设置通过此属性。获取或设置通过此 Pen Pen 对象绘对象绘制的两条连续直线终点之间的联接样式。指定制的两条连续直线终点之间的联接样式。指定如何在图形(子路径)中联接连续的直线或曲如何在图形(子路径)中联接连续的直线或曲线段,该图形(子路径)包含在线段,该图形(子路径)包含在 GraphicsPathGraphicsPath 对象中。对象中。Drawing2D.LineJoinDrawing2D.LineJoin枚举值。

23、枚举值。1818版权所有版权所有C#程序设计与案例教程 清华大学出版社 2 2画刷画刷画刷画刷n nBrushBrush类决定如何填充图形形状(如矩形、椭圆形、扇类决定如何填充图形形状(如矩形、椭圆形、扇形、多边形和封闭路径)内部。形、多边形和封闭路径)内部。n n这是一个抽象基类,不能进行实例化。若要创建一个这是一个抽象基类,不能进行实例化。若要创建一个画刷对象,可使用从画刷对象,可使用从BrushBrush派生出的类。这些派生类主派生出的类。这些派生类主要有:要有:SolidBrushSolidBrush(单色画刷)、(单色画刷)、TextureBrushTextureBrush(纹理(纹

24、理画刷)、画刷)、HatchBrushHatchBrush(阴影画刷)、(阴影画刷)、LinearGradientBrushLinearGradientBrush(线性渐变画刷)、(线性渐变画刷)、PathGradientBrushPathGradientBrush(路径渐变画刷)。前两个定义在(路径渐变画刷)。前两个定义在System.DrawingSystem.Drawing命名空间中,后三个定义在命名空间中,后三个定义在System.Drawing.Drawing2DSystem.Drawing.Drawing2D命名空间中。命名空间中。 1919版权所有版权所有C#程序设计与案例教程

25、清华大学出版社 4.3基本的绘图方法4.3.1 4.3.1 绘制线条或形状绘制线条或形状 1 1画直线画直线画直线画直线使用使用GraphicsGraphics的的DrawLineDrawLine方法可以绘制直线。方法可以绘制直线。public void public void DrawLine(PenDrawLine(Pen pen,intpen,int x1,int y1,int x2,int y2) x1,int y1,int x2,int y2):绘制一条连接由坐标对指定的两个点的线条。:绘制一条连接由坐标对指定的两个点的线条。public void public void DrawL

26、ine(PenDrawLine(Pen pen, float x1, float y1, float pen, float x1, float y1, float x2, float y2)x2, float y2):绘制一条连接由坐标对指定的两个点的:绘制一条连接由坐标对指定的两个点的线条。线条。public void public void DrawLine(PenDrawLine(Pen pen, Point p1, Point p2) pen, Point p1, Point p2):绘:绘制一条连接两个制一条连接两个PointPoint结构的线。结构的线。 2020版权所有版权所有C

27、#程序设计与案例教程 清华大学出版社 2 2画椭圆画椭圆画椭圆画椭圆使用使用GraphicsGraphics的的DrawEllipseDrawEllipse方法可以绘制椭圆。方法可以绘制椭圆。public void public void DrawEllipse(PenDrawEllipse(Pen pen, Rectangle pen, Rectangle rectrect) ):绘制边界:绘制边界RectangleRectangle结构指定的椭圆。结构指定的椭圆。public void public void DrawEllipse(PenDrawEllipse(Pen pen, pen,

28、 intint x, x, intint y, y, intint w, w, intint h) h):绘制一个由边框(该边框由一对坐标、:绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆。高度和宽度指定)定义的椭圆。public void public void DrawEllipse(PenDrawEllipse(Pen, float, float, float, , float, float, float, float)float):绘制一个由边框(该边框由一对坐标、:绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆。高度和宽度指定)定义的椭圆。 2121版权所

29、有版权所有C#程序设计与案例教程 清华大学出版社 3 3绘制圆弧绘制圆弧绘制圆弧绘制圆弧使用使用GraphicsGraphics的的DrawArcDrawArc方法可以绘制圆弧。方法可以绘制圆弧。public void public void DrawArc(PenDrawArc(Pen pen, Rectangle pen, Rectangle rectrect, float , float startAnglestartAngle, float , float sweepAnglesweepAngle) ):绘制一段弧线,:绘制一段弧线,它表示它表示RectangleRectangle结构

30、指定的椭圆的一部分。结构指定的椭圆的一部分。public void public void DrawArc(PenDrawArc(Pen pen, pen, intint x, x, intint y, y, intint w, w, intint h, h, intint startAnglestartAngle, , intint sweepAnglesweepAngle) ):绘制一段弧线,:绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分。它表示由一对坐标、宽度和高度指定的椭圆部分。public void public void DrawArc(PenDrawArc(Pen p

31、en, float x, float y, float pen, float x, float y, float w, float h, float w, float h, float startAnglestartAngle, float , float sweepAnglesweepAngle) ):绘制一段弧线,它表示由一对坐标、宽度和高度绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分。指定的椭圆部分。 2222版权所有版权所有C#程序设计与案例教程 清华大学出版社 4 4画扇形图画扇形图画扇形图画扇形图 使用使用GraphicsGraphics的的DrawPieDrawPie

32、方法可以绘制扇形图,方法可以绘制扇形图,所谓扇形图其实质就是一段圆弧的两个端点与所谓扇形图其实质就是一段圆弧的两个端点与圆心相连。圆心相连。DrawPieDrawPie方法的格式与方法的格式与DrawArcDrawArc方方法基本一致。法基本一致。2323版权所有版权所有C#程序设计与案例教程 清华大学出版社 5 5画矩形画矩形画矩形画矩形使用使用GraphicsGraphics的的DrawRectangleDrawRectangle方法可以绘制矩形。方法可以绘制矩形。public void public void DrawRectangle(PenDrawRectangle(Pen pen,

33、 Rectangle r) pen, Rectangle r):绘制由:绘制由RectangleRectangle结构指定的矩形。结构指定的矩形。public void public void DrawRectangle(PenDrawRectangle(Pen pen, pen, intint x, x, intint y, y, intint w, w, intint h) h):绘制由坐标对、宽度和高度指定的矩形。:绘制由坐标对、宽度和高度指定的矩形。public void public void DrawRectangle(PenDrawRectangle(Pen pen, float

34、 x, float y, pen, float x, float y, float w, float h)float w, float h):绘制由坐标对、宽度和高度指定:绘制由坐标对、宽度和高度指定的矩形。的矩形。 2424版权所有版权所有C#程序设计与案例教程 清华大学出版社 6 6画多边形画多边形画多边形画多边形使用使用GraphicsGraphics的的DrawPolygonDrawPolygon方法可以绘制多边方法可以绘制多边形。形。public void public void DrawPolygon(PenDrawPolygon(Pen pen, Point p) pen, Po

35、int p):绘制由一组绘制由一组PointPoint结构定义的多边形结构定义的多边形public void public void DrawPolygon(PenDrawPolygon(Pen pen, pen, PointFPointF p) p):绘制由一组绘制由一组PointFPointF结构定义的多边形。结构定义的多边形。2525版权所有版权所有C#程序设计与案例教程 清华大学出版社 7 7画贝塞尔样条曲线画贝塞尔样条曲线画贝塞尔样条曲线画贝塞尔样条曲线使用使用GraphicsGraphics的的DrawBezierDrawBezier方法可以绘制贝塞尔样方法可以绘制贝塞尔样条曲线。

36、条曲线。public void public void DrawBezier(PenDrawBezier(Pen pen, Point p1, Point pen, Point p1, Point p2, Point p3, Point p4)p2, Point p3, Point p4):绘制由:绘制由 4 4 个个PointPoint结构定结构定义的贝塞尔样条。义的贝塞尔样条。public void public void DrawBezier(PenDrawBezier(Pen pen, pen, PointFPointF p1, p1, PointFPointF p2, p2, Poi

37、ntFPointF p3, p3, PointFPointF p4) p4):绘制由:绘制由 4 4 个个PointFPointF结结构定义的贝塞尔样条。构定义的贝塞尔样条。public void public void DrawBezier(PenDrawBezier(Pen pen, float x1, float y1, pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float float x2, float y2, float x3, float y3, float x4, floa

38、t y4)y4):绘制由四个表示点的有序坐标对定义的贝塞:绘制由四个表示点的有序坐标对定义的贝塞尔样条。尔样条。 2626版权所有版权所有C#程序设计与案例教程 清华大学出版社 8 8绘制闭合曲线绘制闭合曲线绘制闭合曲线绘制闭合曲线使用使用GraphicsGraphics的的DrawClosedCurveDrawClosedCurve方法可以闭合曲线。方法可以闭合曲线。public void public void DrawClosedCurve(PenDrawClosedCurve(Pen pen, Point p) pen, Point p):绘制由:绘制由 PointPoint结构的数组

39、定义的闭合基数样条。结构的数组定义的闭合基数样条。public void public void DrawClosedCurve(PenDrawClosedCurve(Pen pen, pen, PointFPointF p) p):绘制由:绘制由PointFPointF结构的数组定义的闭合基数样条。结构的数组定义的闭合基数样条。public void public void DrawClosedCurve(PenDrawClosedCurve(Pen pen, Point p, float t, pen, Point p, float t, FillModeFillMode fm) fm):

40、使用指定的张力绘制由:使用指定的张力绘制由PointPoint结构数组定义结构数组定义的闭合基数样条。的闭合基数样条。public void public void DrawClosedCurve(PenDrawClosedCurve(Pen pen, pen, PointFPointF p, float t, p, float t, FillModeFillMode) ):使用指定的张力绘制由:使用指定的张力绘制由 PointFPointF结构数组定义结构数组定义的闭合基数样条。的闭合基数样条。2727版权所有版权所有C#程序设计与案例教程 清华大学出版社 9 9绘制非闭合曲线绘制非闭合曲线

41、绘制非闭合曲线绘制非闭合曲线使用使用GraphicsGraphics的的DrawCurveDrawCurve方法可以非闭合曲线。方法可以非闭合曲线。参数格式同上述绘制闭合曲线的第一个方法。参数格式同上述绘制闭合曲线的第一个方法。1010绘制路径绘制路径绘制路径绘制路径使用使用GraphicsGraphics的的DrawPathDrawPath方法可以绘制路径。路径方法可以绘制路径。路径是直线、矩形、多边形或曲线等组成。是直线、矩形、多边形或曲线等组成。public void public void DrawPath(PenDrawPath(Pen penpen, , GraphicsPathG

42、raphicsPath pathpath) ):绘制:绘制GraphicsPathGraphicsPath对象。对象。2828版权所有版权所有C#程序设计与案例教程 清华大学出版社 1111绘制填充图形绘制填充图形绘制填充图形绘制填充图形和上述方法对应的,还有一组和上述方法对应的,还有一组FillFill开头的方法,可开头的方法,可以用来绘制填充图形。例如:以用来绘制填充图形。例如:FillEcllipsFillEcllips方法可以绘制填充椭圆。方法可以绘制填充椭圆。2929版权所有版权所有C#程序设计与案例教程 清华大学出版社 【案例案例案例案例4-24-2】绘制一个小绘制一个小汽车。汽车

43、。n n利用基本的绘图方法,利用基本的绘图方法,在界面上绘制一个小车在界面上绘制一个小车 。3030版权所有版权所有C#程序设计与案例教程 清华大学出版社 【案例案例案例案例4-34-3】一个简单的一个简单的绘图程序。绘图程序。n n本案例是一个简单的绘本案例是一个简单的绘图程序,能够利用鼠标图程序,能够利用鼠标任意画,能够画直线、任意画,能够画直线、椭圆及矩形,可以设置椭圆及矩形,可以设置色彩。色彩。 3131版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.3.2 绘制文字n n可以使用任何图形对象作为绘制文本的表面。可以使用任何图形对象作为绘制文本的表面。绘制文本需要一个绘制文

44、本需要一个BrushBrush对象(它指示将使用对象(它指示将使用什么图案填充文本)和一个什么图案填充文本)和一个FontFont对象(它描述对象(它描述要填充的图案)。字体可以是系统上安装的任要填充的图案)。字体可以是系统上安装的任何已命名的字体,而画笔可以为任意类型的画何已命名的字体,而画笔可以为任意类型的画笔。因此,有可能使用纯色、图案或者甚至图笔。因此,有可能使用纯色、图案或者甚至图像来绘制文本。像来绘制文本。3232版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.4图像的显示与处理图像的显示与处理4.4.1图像的显示1 1BitmapBitmap类类类类n nBitmap

45、Bitmap类封装类封装GDI+GDI+位图,此位图由图形图像及位图,此位图由图形图像及其属性的像素数据组成。其属性的像素数据组成。BitmapBitmap对象是用于处对象是用于处理由像素数据定义的图像的对象。可以从各种理由像素数据定义的图像的对象。可以从各种各样的图形文件格式(各样的图形文件格式(BMPBMP、GIFGIF、JPEGJPEG、EXIFEXIF、PNGPNG、TIFFTIFF和和ICONICON)中构造)中构造BitmapBitmap对对象。象。3333版权所有版权所有C#程序设计与案例教程 清华大学出版社 (1)主要的属性n nFlagsFlags:获取此:获取此Image

46、Image 对象的属性标记。对象的属性标记。 n nHeightHeight:获取此:获取此Image Image 对象的高度。对象的高度。 n nPalettePalette:获取或设置用于此:获取或设置用于此Image Image 对象的调色对象的调色板。板。 n nRawFormatRawFormat:获取此:获取此ImageImage对象的格式。对象的格式。 n nSizeSize:获取此图像的以像素为单位的宽度和高:获取此图像的以像素为单位的宽度和高度。度。 n nWidthWidth:获取此:获取此Image Image 对象的宽度。对象的宽度。 3434版权所有版权所有C#程序设

47、计与案例教程 清华大学出版社 (2 2)主要的方法)主要的方法n nClone()Clone():创建此:创建此BitmapBitmap(用指定的(用指定的 PixelFormatPixelFormat 定义)定义)部分的副本。部分的副本。 n nFromHiconFromHicon() ():从图标的:从图标的 Windows Windows 句柄创建句柄创建 BitmapBitmap。 n nFromResourceFromResource() ():从指定的:从指定的 Windows Windows 资源创建资源创建 Bitmap Bitmap 对象。对象。 n nGetBoundsGe

48、tBounds() ():以指定的单位获取此:以指定的单位获取此Image Image 对象的边框。对象的边框。 n nGetPixelGetPixel() ():获取此:获取此BitmapBitmap中指定像素的颜色。中指定像素的颜色。 n nGetThumbnailImageGetThumbnailImage() ():返回此:返回此Image Image 对象的缩略图。对象的缩略图。 n nSave()Save():将此图像以指定的格式保存到指定的流中。:将此图像以指定的格式保存到指定的流中。 n nSetPixelSetPixel() ():设置:设置BitmapBitmap对象中指定

49、像素的颜色。对象中指定像素的颜色。3535版权所有版权所有C#程序设计与案例教程 清华大学出版社 2图像的显示图像的显示若使用若使用ImageImage来显示图像。可以用来显示图像。可以用ImageImage的静态的静态方法方法FromFileFromFile() ()来加载图像文件。如:来加载图像文件。如:Image Image imim= =Image.FromFile(“c:ba.jpgImage.FromFile(“c:ba.jpg”);”);g.DrawImage(im,0,0);g.DrawImage(im,0,0);3636版权所有版权所有C#程序设计与案例教程 清华大学出版社

50、4.4.2 保存、拷贝和粘贴保存图像可以使用保存图像可以使用BitmapBitmap的的SaveSave方法。例如:方法。例如:pictureBox1.image.Save(c:myimage.bmp);pictureBox1.image.Save(c:myimage.bmp);在保存图像时,还可以指定图像文件的格式。例在保存图像时,还可以指定图像文件的格式。例如:如:pictureBox1.image.Save(c:myimage.bmp); pictureBox1.image.Save(c:myimage.bmp); pictureBox1.image.Save(c:myimage.bmp

51、);pictureBox1.image.Save(c:myimage.bmp);pictureBox1.image.Save(c:myimage.bmp,ImpictureBox1.image.Save(c:myimage.bmp,ImageFormat.Jpeg); ageFormat.Jpeg); 3737版权所有版权所有C#程序设计与案例教程 清华大学出版社 n nBitmap Bitmap 类提供了类提供了CloneClone方法,可用于制作现有方法,可用于制作现有BitmapBitmap对象的副本。对象的副本。CloneClone方法带有源矩形参方法带有源矩形参数,可用于指定要复制的

52、原始位图的部分。下数,可用于指定要复制的原始位图的部分。下面的示例通过拷贝现有面的示例通过拷贝现有 BitmapBitmap对象的上半部分对象的上半部分来创建来创建BitmapBitmap对象。然后绘制两幅图像。对象。然后绘制两幅图像。 3838版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.4.3 图像处理1 1彩色图像变成灰度图像彩色图像变成灰度图像彩色图像变成灰度图像彩色图像变成灰度图像将彩色图像像素值分解为三基色将彩色图像像素值分解为三基色R R、GG、B B,求其,求其和的平均值,然后使用和的平均值,然后使用SetPixelSetPixel方法以该平均方法以该平均值参数生

53、成图像。对一个像素的处理过程如下:值参数生成图像。对一个像素的处理过程如下:(1 1)取颜色值)取颜色值Color c=Color c=im.GetPixel(i,j);/imim.GetPixel(i,j);/im为为BitmapBitmap类型对象类型对象3939版权所有版权所有C#程序设计与案例教程 清华大学出版社 (2)分解颜色值intint r= r=c.Rc.R; ;intint g= g=c.Rc.R; ;intint b= b=c.Rc.R; ;(3)取平均,生成新的颜色intint cc=(r+g+b)/3; cc=(r+g+b)/3;Color c1=Color c1=Co

54、loe.FromArgb(cc,cc,ccColoe.FromArgb(cc,cc,cc); );(4)设定图像颜色im1.SetPixel(i,j,c1);/im1im1.SetPixel(i,j,c1);/im1是是imim的复制的复制 4040版权所有版权所有C#程序设计与案例教程 清华大学出版社 2 2对图像进行浮雕处理对图像进行浮雕处理对图像进行浮雕处理对图像进行浮雕处理 将彩色图像像素值分解为三基色将彩色图像像素值分解为三基色R R、GG、B B,分,分别与相邻像素的三基色别与相邻像素的三基色R R、GG、B B相减后加上一相减后加上一个常量(个常量(128128)。然后作为新的像

55、素的)。然后作为新的像素的RGBRGB颜色颜色值(为了防止颜色溢出,需处理小于值(为了防止颜色溢出,需处理小于0 0和大于和大于255255的颜色值)。对一个像素的处理过程如下:的颜色值)。对一个像素的处理过程如下:(1 1)取两个像素的颜色值)取两个像素的颜色值Color c1=Color c1=im.GetPixel(i,j);/imim.GetPixel(i,j);/im为为BitmapBitmap类型对象类型对象Color c2=im.GetPixel(i+1,j+1);/Color c2=im.GetPixel(i+1,j+1);/取相邻像素的颜色值取相邻像素的颜色值4141版权所有

56、版权所有C#程序设计与案例教程 清华大学出版社 (2 2)对两个像素的颜色值进行分解,相减后加上)对两个像素的颜色值进行分解,相减后加上128128, intint r=Math.Abs(c1.R-c2.R)+128; r=Math.Abs(c1.R-c2.R)+128; intint g=Math.Abs(c1.G-c2.G)+128; g=Math.Abs(c1.G-c2.G)+128; intint b=Math.Abs(c1.B-c2.B)+128; b=Math.Abs(c1.B-c2.B)+128;(3 3)处理后生成新的颜色)处理后生成新的颜色if(rif(r0)r=0;255)

57、r=255;255)r=255;if(gif(g0)g=0;255)g=255;255)g=255;if(bif(b0)b=0;255)b=255;255)b=255;Color cc=Color cc=Coloe.FromArgb(r,g,bColoe.FromArgb(r,g,b); );(4 4)设定图像颜色)设定图像颜色im1.SetPixel(i,j,cc);/im1im1.SetPixel(i,j,cc);/im1是是imim的复制的复制 4242版权所有版权所有C#程序设计与案例教程 清华大学出版社 3 3图像的透明度处理图像的透明度处理图像的透明度处理图像的透明度处理取出颜色值

58、后,再给定一个透明度的值,利用取出颜色值后,再给定一个透明度的值,利用Color.FromRgb(intColor.FromRgb(int a,Colora,Color c) c)方法即可生成目方法即可生成目标图像的颜色值。从而实现不同的透明效果。标图像的颜色值。从而实现不同的透明效果。参数参数a a的取值在的取值在02550255之间。之间。c=c=im.GetPixel(i,jim.GetPixel(i,j); );Color cc=Color cc=Color.FromArgb(a,cColor.FromArgb(a,c); );im.SetPixel(i,j,ccim.SetPixel

59、(i,j,cc); );4343版权所有版权所有C#程序设计与案例教程 清华大学出版社 4图像的旋转与拉伸图像的旋转与拉伸n n图像的旋转可以使用图像的旋转可以使用ImageImage类的类的RotateFlipRotateFlip方法方法实现,它只有一个实现,它只有一个RotateFlipTypeRotateFlipType枚举参数,枚举参数,用来指定图像的旋转和翻转的类型。用来指定图像的旋转和翻转的类型。 4444版权所有版权所有C#程序设计与案例教程 清华大学出版社 5 5图像格式转换图像格式转换图像格式转换图像格式转换GDI+GDI+的的ImageImage类中有一个类中有一个Save

60、Save方法,它可以用方法,它可以用来将图像按指定的格式保存文件中。格式如下:来将图像按指定的格式保存文件中。格式如下:void void Save(stringSave(string filename,ImageFormatfilename,ImageFormat format);format);其中,其中,filenamefilename用来指定要保存的文件名,用来指定要保存的文件名,formatformat用来指定要保存的格式,可以直接引用用来指定要保存的格式,可以直接引用ImageFormatImageFormat类的静态成员属性来指定。类的静态成员属性来指定。 4545版权所有版权所

61、有C#程序设计与案例教程 清华大学出版社 【案例案例案例案例4-44-4 】图像处理程图像处理程序。序。n n创建一个创建一个WindowsWindows应用应用程序,在窗体上添加两程序,在窗体上添加两个图片框和三个按钮。个图片框和三个按钮。第一个图片显示原图像,第一个图片显示原图像,第二个图片框显示处理第二个图片框显示处理后的图像。后的图像。 4646版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.5 声音与视频的播放声音与视频的播放4.5.1 Media Player控件及其使用 在在C#C#中,可以引用中,可以引用WindowsWindows自带的自带的Windows Win

62、dows Media PlayerMedia Player组件播放多种格式的视频和音频组件播放多种格式的视频和音频文件,包括文件,包括MPEGMPEG视频、视频、AVIAVI、WAVWAV和和MIDIMIDI等等格式的文件。格式的文件。4747版权所有版权所有C#程序设计与案例教程 清华大学出版社 1 1添加添加添加添加Windows Media PlayerWindows Media Player控件控件控件控件Windows Media PlayerWindows Media Player控件不是标准控件,在工具箱中控件不是标准控件,在工具箱中无法找到,在使用该控件之前需把他加载到工具箱中

63、。无法找到,在使用该控件之前需把他加载到工具箱中。加载方法如下:加载方法如下:(1 1)执行)执行“ “工具工具” ”“添加添加/ /移出工具箱移出工具箱” ”菜单命令,菜单命令,打开如图打开如图4-254-25所示的所示的“ “自定义工具箱自定义工具箱” ”对话框。对话框。(2 2)在)在“ “自定义工具箱自定义工具箱” ”对话框的对话框的“ “COMCOM组件组件” ”选项卡选项卡中选择中选择“ “Windows Media Player”Windows Media Player”控件,并单击控件,并单击“ “确定确定” ”按钮,则将按钮,则将Windows Media PlayerWin

64、dows Media Player控件添加到工具箱控件添加到工具箱中。中。(3 3)在工具箱中找到)在工具箱中找到Windows Media PlayerWindows Media Player控件,将控控件,将控件添加到窗体上。件添加到窗体上。4848版权所有版权所有C#程序设计与案例教程 清华大学出版社 2. Windows Media Player2. Windows Media Player控件的常用属性和方法控件的常用属性和方法控件的常用属性和方法控件的常用属性和方法(1 1)常用的属性)常用的属性AutoRewindAutoRewind:用来设置多媒体文件在播放完成时是否自动:用来

65、设置多媒体文件在播放完成时是否自动回到起始位置。回到起始位置。DisplaysizeDisplaysize:用来设置屏幕的大小。主要的取值有:用来设置屏幕的大小。主要的取值有:MpDefaultsizeMpDefaultsize(正常大小)、(正常大小)、MpFullscreenMpFullscreen(全屏)、(全屏)、MpFitTosizeMpFitTosize(自定义大小)。(自定义大小)。DockDock:用来指定控件在窗体中的位置模式。其中,:用来指定控件在窗体中的位置模式。其中,FillFill为为指定其充满整个窗体。指定其充满整个窗体。MuteMute:用来设置是为静音状态。默认

66、为:用来设置是为静音状态。默认为false.false.PlayCountPlayCount:用来设置控件的播放次数。:用来设置控件的播放次数。AutoStartAutoStart:用来设定是否自动播放。默认为:用来设定是否自动播放。默认为truetrue。FileNameFileName:用来设置要播放的文件。:用来设置要播放的文件。PlayStatePlayState:用来检测控件当前的播放状态。:用来检测控件当前的播放状态。DisplayModeDisplayMode:用来确定是以帧的形式还是以时间的形式:用来确定是以帧的形式还是以时间的形式显示速度。显示速度。4949版权所有版权所有C

67、#程序设计与案例教程 清华大学出版社 (2 2)常用的方法)常用的方法Play()Play():用来播放多媒体文件。:用来播放多媒体文件。Pause()Pause():用来暂停多媒体文件的播放。:用来暂停多媒体文件的播放。Stop()Stop():用来停止对多媒体文件的播放。:用来停止对多媒体文件的播放。 5050版权所有版权所有C#程序设计与案例教程 清华大学出版社 【案例案例案例案例4-54-5】用用Media Media PlayerPlayer控件播放视频文件。控件播放视频文件。n n建立建立WindowsWindows程序。窗程序。窗体上添加一个体上添加一个Media Media P

68、layerPlayer控件和三个按钮。控件和三个按钮。三个按钮分别用于打开、三个按钮分别用于打开、播放和停止视频文件的播放和停止视频文件的播放。播放。 5151版权所有版权所有C#程序设计与案例教程 清华大学出版社 4.5.2 ShockwaveFlash控件及其使用n nShockwaveFlashShockwaveFlash控件可用来播放控件可用来播放FlashFlash文件。文件。该控件也是一个扩展的控件,使用时,需要先该控件也是一个扩展的控件,使用时,需要先添到工具箱中。添加方法类似于添到工具箱中。添加方法类似于Windows Windows Media PlayerMedia Pla

69、yer。不同的是在。不同的是在“ “COMCOM组件组件” ”选项卡选项卡中选择中选择“ “Shockwave Flash Object”Shockwave Flash Object”控件。控件。5252版权所有版权所有C#程序设计与案例教程 清华大学出版社 【案例案例4-64-6】FlashFlash文件文件播放器。播放器。n n建立一个建立一个WindowsWindows应用应用程序,窗体上放置程序,窗体上放置7 7个个按钮和按钮和1 1个个ShockwaveFlashShockwaveFlash控件,控件,能够播放能够播放FlashFlash动画。动画。 5353版权所有版权所有C#程序设计与案例教程 清华大学出版社 5454版权所有版权所有

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

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