9 绘图及图像谢新冲.docx

上传人:b****5 文档编号:30057474 上传时间:2023-08-04 格式:DOCX 页数:62 大小:450.10KB
下载 相关 举报
9 绘图及图像谢新冲.docx_第1页
第1页 / 共62页
9 绘图及图像谢新冲.docx_第2页
第2页 / 共62页
9 绘图及图像谢新冲.docx_第3页
第3页 / 共62页
9 绘图及图像谢新冲.docx_第4页
第4页 / 共62页
9 绘图及图像谢新冲.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

9 绘图及图像谢新冲.docx

《9 绘图及图像谢新冲.docx》由会员分享,可在线阅读,更多相关《9 绘图及图像谢新冲.docx(62页珍藏版)》请在冰豆网上搜索。

9 绘图及图像谢新冲.docx

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

滚动条

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1