9 绘图及图像谢新冲.docx
- 文档编号:30057474
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:62
- 大小:450.10KB
9 绘图及图像谢新冲.docx
《9 绘图及图像谢新冲.docx》由会员分享,可在线阅读,更多相关《9 绘图及图像谢新冲.docx(62页珍藏版)》请在冰豆网上搜索。
9绘图及图像谢新冲
第9章绘图及图像
在窗体和控件上绘图是一种常见的操作,事实上,所有的窗体和控件都是绘制出来的的,如果要实现特定的控件,也需要绘图。
本章介绍有关绘图、字体及图像的基本类及常见的操作。
9.1绘图基础支持类
System.Drawing名字空间包括了.NET的基本图形功能,这种图形功能被称为GDI+。
这个名称来源于原始的Windows图形库,即图形设备接口(GraphicalDeviceInterface,GDI)。
GDI+是在GDI的基础上的2D图形库,是为绘制线条、形状、文本和显示位图而设计的。
System.Drawing名字空间包括了有关绘图的基本功能,更加高级的功能由以下名字空间提供:
1)System.Drawing.Drawing2D:
供了高级的2D和向量图形。
2)System.Drawing.Imaging:
提供了高级的图像处理。
3)System.Drawing.Text:
供了高级文本显示功能。
4)System.Drawing.Printing:
供了打印功能。
要进行绘图,需要用到相关的基础支持类及数据结构,包括位置、大小、颜色、画笔、和刷子等。
本节就来介绍这些类及数据结构。
9.1.1位置及大小
表示位置及范围,经常要用到点(Point)、矩形(Rectangle)、大小(Size)等数据结构。
1.Point和PointF
Point和PointF都是一种结构,两者都表示一个简单的(X,Y)坐标点。
两者的不同之处在于:
Point使用整数坐标,而PointF使用的是浮点(float)型坐标。
表91、表92和表93总结了Point类和PointF类的主要成员。
表91Point结构的成员
成员
描述
IsEmpty
如果X和Y都是0,则返回True
X
X坐标
Y
Y坐标
Equals
如果两个点的坐标相同,则返回True
Offset
通过一个具体的数值平移坐标
ToString
返回一个表示坐标点的字符串
+,-
+、-运算符
==,!
=
等式运算符
表92Point结构的static方法
方法
描述
Ceiling
将PointF坐标向上近似成最接近的整数
Round
将PointF坐标向下近似成最接近的整数
Truncate
截取PointF坐标
表93PointF结构的成员
成员
描述
IsEmpty
如果X和Y都是0,则返回True
X
X坐标
Y
Y坐标
+,-
+,-运算符
==,!
=
等式运算符
另外,还定义了在Point和Size之间、Point和PointF之间、PointF和Point之间进行转换的运算符。
2.Rectangle和RectangleF
Rectangle和RectangleF结构相似,它们都是表示矩形的数值类型,不同之处在于:
Rectangle使用整数坐标,而RectangleF则使用浮点型坐标。
表94、表95和表96总结了Rectangle类和RectangleF类的主要成员。
表94Rectangle结构的主要成员
成员
描述
IsEmpty
如果X和Y都是0,则返回True
X,Y
左上角的X和Y坐标
Top,Left,Bottom,Right
矩形左上右下的坐标
Width,Height
矩形的宽度和高度
Location
获取(或设定)左上角的坐标
Size
表示矩形高度和宽度的Size对象
Contains
如果矩形中包括了一个给定的矩形(或点),则返回True
Equals
如果这个点和其他的点包括了相同的坐标,则返回True
FromLTRB
由左、上、右、下的坐标值创建一个矩形
Inflate
放大矩形
Intersect
返回两个矩形交叉部分的矩形
IntersectsWith
如果一个矩形和另外一个矩形交叉,则返回True
Offset
通过一个具体的数值平移一个点的坐标
ToString
返回一个表示矩形的字符串
Union
返回一个表示两个矩形合并的矩形
==,!
=
等式运算符
表95Rectangle结构的static方法
方法
描述
Ceiling
将RectangleF的坐标向上近似成最接近的整数
Round
将RectangleF的坐标向下近似成最接近的整数
Truncate
截取RectangleF的坐标
Union
返回一个表示两个矩形合并的矩形
表96RectangleF结构的成员
成员
描述
IsEmpty
如果X和Y都是0,则返回True
X,Y
左上角的X和Y坐标
Top,Left,Bottom,Right
矩形上、左、下、右的坐标
Width,Height
矩形的宽度和高度
Location
获取(或设定)左上角的坐标
Size
表示矩形高度和宽度的Size对象
Contains
如果矩形中包括了一个给定的矩形(或者点),则返回True
Equals
如果这个点和其他的点包括了相同的坐标,则返回True
FromLTRB
由左、上、右、下的坐标值创建一个矩形
Inflate
放大矩形
Intersect
返回两个矩形交叉部分的矩形
IntersectsWith
如果一个矩形和另外一个矩形交叉,则返回True
Offset
通过一个具体的数值转换一个点的坐标
ToString
返回一个表示矩形的字符串
==,!
=
等式运算符,用来运算矩形的大小的位置
另外,还定义了在Rectangle和RectangleF之间双向转换的运算符。
RectangleF有两个static方法:
Truncate()和Union()。
3.Size和SizeF
Size和SizeF结构通过Width和Height一对属性表示了一个矩形区域的大小。
如以前,Size使用整数坐标,而SizeF则使用浮点型坐标。
表97、表98和表99总结了Size类和SizeF类的主要成员。
表97Size结构的主要成员
成员
描述
Height
矩形区域的高度
Width
矩形区域的宽度
IsEmpty
如果高和宽的值都是0,则返回True
Equals
测试两个Size对象的高和宽是否相等
ToString
返回一个表示Size的字符串
+,-
+,-运算符
==,!
=
等式运算
表98Size结构的static方法
方法
描述
Ceiling
将SizeF的坐标向上近似成最接近的整数
Round
将SizeY的坐标向下近似成最接近的整数
Truncate
截取SizeF的坐标
表99SizeF结构的成员
成员
描述
Height
矩形区域的高度
Width
矩形区域的宽度
IsEmpty
如果高和宽的值都是0,则返回True
Equals
测试两个Size对象的高和宽是否相等
ToPointF
返回一个表示SizeF的Point对象
ToSize
返回一个表示SizeF的Size对象
ToString
返回一个表示SizeF的字符串
+,-
+,-运算符
==,!
=
等式运算
另外,系统还提供了从Size到SizeF、从SizeF到Size、从Size到Point以及从SizeF到PointF的转换。
9.1.3颜色
颜色用Color结构来表示。
颜色值是通过4个整数值表示的:
A1pha、Red、Green和B1ue,其中Alpha表示透明度,另外的3个则表示颜色的红、绿、蓝3种基色。
.NET提供了大量的标准颜色,这些颜色被定义为System.Drawing.KnownColor枚举的一部分。
这个枚举包括了一百多个以上的成员,成员的值可以区分为以下两个部分:
(1)颜色描绘了屏幕上的元件,如:
窗口文本、控件、活动标题。
如果用户使用控制面版改变桌面颜色样式,那么这些都会发生改变。
(2)固定的RGB(红、绿、蓝)值表示了标准的颜色,如:
天蓝色(Azure)、菊色(Cornflower)、轻灰色(LightGray)和中紫色(MediumPurple)。
表910和表911列出了Color类的重要属性和方法。
表910Color类的属性
属性
描述
A
获取颜色的alpha(透明度)成分
R,G,B
获取颜色的红、绿、蓝成分
IsEmpty
如果颜色值没有初始化,则返回True
IsKnownColor
如果颜色符合预定义的颜色,则返回True
IsNamedColor
如果颜色有一个名称,则返回True
Name
返回颜色的名称
表911Color类的方法
方法
描述
Equals
测试Color对象是否相等
FromArgb,FromKnownColor,FromName
创建一个Color对象
GetBrightness,GetHue,GetSaturation
获取颜色的色调(Hue)、饱和度(Saturation)、亮度(Brightness)成分,即:
HSB成分
ToArgb
返回的颜色的Alpha、Red、Green和Blue成分
ToKnownColor
将已知颜色的成员返回给相应的颜色对象
==,!
=
测试颜色值是否相等
注意,Color没有构造函数,但是可以通过使用静态的生成方法返回Color对象的引用,如:
Colorc2=Color.FromArgb(255,0,127);
Colorc3=Color.FromArgb(255,255,0,127);
Alpha的取值为0表示完全透明,取值为255则表示完全不透明。
例91ColorTest.cs测试颜色的使用
1privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse)
2{
3Graphicsg=e.Graphics;
4Color[]colors=
5{
6Color.Red,
7Color.FromName("Blue"),
8Color.FromKnownColor(KnownColor.ActiveCaption),
9Color.FromKnownColor(KnownColor.InactiveCaption),
10Color.FromArgb(255,255,0),
11Color.FromArgb(128,255,255,0),
12};
13for(inti=0;i 14{ 15g.FillRectangle(newSolidBrush(colors[i]),i*30+10,20,20,100); 16} 17} 运行结果如图91: 图91测试颜色的使用 9.1.4画笔 画笔(Pen)类和刷子(Brush)类包装了线条厚度、线条样式、填充模式和颜色,画笔用来绘制形状、线条和曲线的轮廓,而刷子则用于填充区域。 画笔有两个基本的属性: 宽度(Width)和填充颜色(或填充模式)。 填充模式是由Brush的子类来提供的,所以,可以根据需要,在绘制线条的时候,填充合适的纹理(texture)或斜度(gradient)。 表912列出了Pen类中的几个重要属性。 表912Pen类的重要属性 属性 描述 Alignment 获取(或设置)这只画笔所绘制对象的对齐(参见表11.3) Brush 获取(或设置)与这只画笔相关的刷子 Color 获取(或设置)这只画笔的颜色 DashPattern 获取(或设置)自定义的破折号和空格的排列 DashStyle 表示这条线所使用的破折号样式 LineJoin 表示线条连接的方法 MiterLimit 表示在斜接角上,连接厚度的限度 PenType 说明画笔的类型 StartCap,EndCap 表示线条的开始罩(cap)和结束罩 Transform 一个矩阵,用于描述该画笔所绘制对象是如何转换的 Width 获取(或设置)画笔的像素宽度 Alignment描述了画笔是如何与相关线条相对齐的,用PenAlignment枚举的成员表示这些对齐方式,如表913所示。 表913PenAlignment枚举 成员 描述 Center 画笔和正被绘制线条的中心对齐 Inset 画笔和正被绘制线条的内部对齐 Left 画笔和正被绘制线条的左边对齐 Outset 画笔和正被绘制线条的外部对齐 Right 画笔和正被绘制线条的右边对齐 DashStyle设置了使用该画笔所绘制虚线(dashedline)的样式,用DashStyle枚举的成员表示这些样式,如表914所示。 表914DashStyle枚举 成员 描述 Custom 说明用户自定义的线条样式 Dash 说明一条虚线 DashDot 说明了具有重复“破折线-点”模式的线条 DashDotDot 说明了具有重复“破折线-点-点”模式的线条 Dot 说明了点样式的线条 Solid 说明了实心线条(默认值) 线罩(Linecap)是指线的末端是如何被绘制的,可以用LineCap枚举的成员表示。 线罩主要包括了以下几种: 圆、正方形、三角形和自定义形。 PenType类是System.Drawing.Drawing2D.PenType枚举的成员,可能的取值如表915所示: 表915PenType枚举 成员 描述 HatchFill 画笔将以阴影图案填充 LinearGradient 画笔将以线性渐变填充 PathGradient 画笔以路径渐变填充 SolidColor 画笔将以纯色(默认的颜色)填充 TextureFill 画笔将以位图纹理填充 表916中列出了Pen类最重要的几种方法。 表916Pen类的方法 方法 描述 Clone 创建一个该画笔的准确拷贝 Dispose 释放画笔所用的Windows资源 MultiplyTransform 将转换矩阵与另一个矩阵相乘 ResetTransform 将转换矩阵重新设置 RotateTransform 旋转转换 ScaleTransform 比例转换 SetLineCap 设置画笔的起始和结束的线罩 TranslateTransform 平移转换 Dispose()方法能释放Pen对象使用的潜在系统资源。 尽管在Pen对象被放入回收站或者程序结束时也会释放这些资源,但是为了有效利用系统资源,在结束Pen对象时应该即时调用Dispose()。 如果想获取一个Pen对象来表示一种标准颜色,可以使用System.Drawing.Pens类。 对于Color类中每一种预定义的颜色,System.Drawing.Pens类都包含相应的Pen对象,如: Penpen=Pens.AliceBlue; 如果想用一个Pen对象描述一种用于UI元件中的默认颜色,就可以使用System.Drawing.SystemPens类。 对于每一种预先定义的UI颜色,这个类都有相应的Pen对象,如: Pen=SystemPens.HighlightText; 表917列出了所有能够通过SystemPens类的属性检索到的颜色。 表917SystemPens类的属性 属性 描述 ActiveCaptionText 活动窗口标题栏文本的颜色 Control 按扭或其他控件的颜色 ControlDark 3D元件阴影部分的颜色 ControlDarkDark 3D元件最暗部分的颜色 ControlLight 3D元件高亮部分的颜色 ControlLightLight 3D元件最亮部分的颜色 ControlText 控件上面文本的颜色 GrayText 无效文本的颜色 Highlight 高亮背景的颜色 HighlightText 高亮区域文本的颜色 InactiveCaptionText 非活动窗口标题栏文本的颜色 InfoText 在工具提示上的文本颜色 MenuText 菜单上文本颜色 WindowFrame 窗口框架的颜色 WindowText 窗口文本的颜色 DashPattern属性通过为每一个破折线和空格的大小提供一个数组,使得可以自定线条的样式: pen.DashPattern=newfloat[]{0.5,1,1,5,2,2.5}; 例92PenTest.cs使用Pen 1privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse) 2{ 3Graphicsg=e.Graphics; 4 5Penpen; 6Pointpoint=newPoint(10,10); 7SizesizeLine=newSize(0,150); 8SizesizeOff=newSize(30,0); 9 10pen=Pens.LimeGreen; 11g.DrawLine(pen,point+=sizeOff,point+sizeLine); 12pen=SystemPens.MenuText; 13g.DrawLine(pen,point+=sizeOff,point+sizeLine); 14pen=newPen(Color.Red); 15g.DrawLine(pen,point+=sizeOff,point+sizeLine); 16pen=newPen(Color.Red,8); 17g.DrawLine(pen,point+=sizeOff,point+sizeLine); 18 19pen.DashStyle=DashStyle.Dash; 20g.DrawLine(pen,point+=sizeOff,point+sizeLine); 21pen.DashStyle=DashStyle.Dot; 22g.DrawLine(pen,point+=sizeOff,point+sizeLine); 23 24pen.DashStyle=DashStyle.Solid; 25pen.StartCap=LineCap.Round; 26g.DrawLine(pen,point+=sizeOff,point+sizeLine); 27pen.EndCap=LineCap.Triangle; 28g.DrawLine(pen,point+=sizeOff,point+sizeLine); 29 30pen.DashPattern=newfloat[]{0.5f,1f,1,5f,2f,2.5f}; 31g.DrawLine(pen,point+=sizeOff,point+sizeLine); 32} 运行结果如图92: 图92使用Pen 9.1.4刷子 刷子用来填充图形的内部。 刷子是抽象基类Brush派生出来的类,在System.Drawing中定义了两种刷子类: (1)SolidBrush——定义一个单颜色的刷子。 (2)TextureBrush——定义一个用图像填充图形内部区域的刷子。 SolidBrush类只有几个重要成员,如表918所示。 表918SolidBrush类的重要成员 成员 描述 SolidBrush 设置一个颜色的构造函数 Clone 创建一个该刷子的准确拷贝 Dispose 释放刷子占用的Windows资源 Color 获取或设置刷子的颜色 OnSystemColorChanged 当系统颜色发生变化时调用 如果想用一个Brush对象描述一种标准颜色,那么可以使用System.Drawing.Brushes类。 对于Color类中预先定义的每一种颜色,这个类都有相应的Bursh对象。 如: Brushbr=Brushes.Azure; 如果想用刷子描述用于UI元件中的一种标准颜色,可以使用System.Drawing.SystemBrushes类。 对于每一种预先定义的UI颜色,都有相应的Bursh对象。 如: Brushbr=SystemBrushes.Desktop; 表919列出了所有能够通过SystemBrushes类的属性检索到的颜色。 表919SystemBrushes类的属性 属性 描述 ActiveBorder 活动窗口边界的颜色 ActiveCaption 活动窗口标题栏的颜色 ActiveCaptionText 活动窗口标题栏的文本颜色 AppWorkspace 它是应用程序工作区的颜色(应用程序工作区是多文档视图中未被文档占据的区域) Control 3D元件的外表颜色 ControlDark 3D元件阴影部分的颜色 ControlDarkDark 3D元件最暗的颜色 ControlLight 3D元件高亮颜色 ControlLightLight 3D元件最亮颜色 ControlText 控件上面文本颜色 Desktop 桌面颜色 Highlight 高亮背景的颜色 HighlightText 高亮文本的颜色 HotTrack 用于表示热跟踪(hot-tracking)的颜色 InactiveBorder 活动窗口边界颜色 InactiveCaption 活动窗口标题栏颜色 Info 工具提示的背景颜色 Menu 菜单背景颜色 ScrollBar 滚动条
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 绘图及图像谢新冲 绘图 图像 谢新冲
![提示](https://static.bdocx.com/images/bang_tan.gif)