17.2 图形绘制4

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

17.2.5 线条样式

C#为画笔绘制线段提供了多种样式:一是线帽(包括起点和终点处)样式;二是线条样式。

17.2.5.1 线帽样式

Pen类的StartCap属性可以设置线段起点使用的线帽样式;EndCap属性可以设置线段终点使用的线帽样式。这两个属性的值是LineCap枚举,它包括以下成员:

  1. AnchorMask:用于检查线帽是否为锚头帽的掩码。
  2. ArrowAnchor:箭头状锚头帽。
  3. Custom:自定义线帽。
  4. DiamondAnchor:菱形锚头帽。
  5. Flat:平线帽。
  6. NoAnchor:没有锚。
  7. Round:圆线帽。
  8. RoundAnchor:圆锚头帽。
  9. Square:方线帽。
  10. SquareAnchor:方锚头帽。
  11. Triangle:三角线帽。

【例 17.12 【项目:code17-012】绘制带线帽的线段。

private void button1_Click(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

Pen myPen = new Pen(Color.Red, 8);

//几种主要的线帽

LineCap[] pCap = { LineCap.AnchorMask, LineCap.ArrowAnchor, LineCap.DiamondAnchor, LineCap.Flat, LineCap.Round,

LineCap.Square, LineCap.SquareAnchor, LineCap.Triangle};

for(int i = 0;i< pCap.Length;i++)

{

//设置线段开始端线帽样式

myPen.StartCap = pCap[i];

//设置线段结束端线帽样式

myPen.EndCap = pCap[pCap.Length - 1 - i];

g.DrawLine(myPen, new Point(100, i * 30 + 20), new Point(300, i * 30 + 20));

}

g.Dispose();

}

运行结果如下图所示:

图17-13 常见的线帽样式

17.2.5.2 自定义线帽

使用自定义线帽,需要使用到GraphicsPath类和CustomLineCap类。

1、GraphicsPath类表示一系列相互连接的线段和曲线。路径可由任意数目的图形(子路径)组成,应用程序可以使用路径来绘制形状的轮廓、填充形状内部和创建剪辑区域。通常情况下可以使用不带参数的构造函数初始化一个GraphicsPath,然后使用它提供的方法来添加图形到路径。

GraphicsPath常用方法:

  1. AddArc:添加椭圆弧。
  2. AddBezier:添加贝塞尔曲线。
  3. AddClosedCurve:向此路径添加一个闭合曲线。 由于曲线经过数组中的每个点,因此使用基数样条曲线。
  4. AddCurve:添加样条曲线。
  5. AddEllipse:添加椭圆。
  6. AddLine: 添加线段。
  7. AddPie:添加扇形轮廓。
  8. AddPolygon: 添加多边形。
  9. AddString:添加文本字符串。
  10. AddPath:将指定的 GraphicsPath 追加到该路径。

2、CustomLineCap类封装自定义的用户定义的线帽。

CustomLineCap常用的构造函数:

  1. Public Sub New ( fillPath As GraphicsPath, strokePath As GraphicsPath)

参数说明:

  1. fillPath:自定义线帽填充内容的GraphicsPath对象。
  2. strokePath:自定义线帽轮廓的GraphicsPath对象。

上述两个参数不能同时使用,必须设置其中一个参数为nothing。如果均未向两个参数传递空值,则第一个参数将被忽略。

3、最后设置Pen的CustomStartCap或者CustomEndCap属性为定义的CustomLineCap。

**注意:**使用此方法时,线段起点或终点与GraphicsPath的(0,0)位置重合,而且坐标系和之前讲到的C#坐标系不同,见下图:

图17-14 自定义线帽时的GraphicsPath坐标系

【例 17.13 【项目:code17-013】自定义三角形线帽。

private void button1_Click(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

Pen myPen = new Pen(Color.Red, 4);

//定义包含一个多边形的路径

Point[] points = { new Point(0, 0), new Point(3, 6), new Point(-3, 6) };

GraphicsPath gpath = new GraphicsPath();

gpath.AddPolygon(points);

//自定义线帽样式

CustomLineCap pCap = new CustomLineCap(null, gpath);

//设置自定义起点线帽和自定义终点线帽

myPen.CustomStartCap = pCap;

myPen.CustomEndCap = pCap;

g.DrawLine(myPen, new Point(50, 50), new Point(250, 50));

}

运行结果如下图所示:

图17-15自定义线帽

17.2.5.3 点划线样式

Pen类的DashStyle属性可以设置用 Pen 对象绘制点划线,点划线是由点与短线段连续组成的直线。DashStyle属性的值是DashStyle枚举,它包括以下成员:

  1. Custom:指定用户定义的自定义点划线样式。
  2. Dash:指定由短线段构成的直线。
  3. DashDot:指定由重复的短线段和点构成的直线。
  4. DashDotDot:指定由重复的短线段、点、点构成的直线。
  5. Dot:指定由点构成的直线。
  6. Solid:实线。

【例 17.14 【项目:code17-014】使用线条样式。

private void button1_Click(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

Pen p = new Pen(Color.Red, 4);

//常见的几种点划线样式

DashStyle[] pDash = { DashStyle.Dot, DashStyle.DashDot, DashStyle.Dash, DashStyle.DashDotDot };

for(int i = 0;i< pDash.Length;i++)

{

//设置点划线样式

p.DashStyle = pDash[i];

g.DrawLine(p, new Point(20, i * 30 + 20), new Point(200, i * 30 + 20));

}

}

private void button2_Click(object sender, EventArgs e)

{

Graphics g = this.CreateGraphics();

Pen p = new Pen(Color.Red, 2);

//设置使用短横线

p.DashStyle = DashStyle.Dash;

g.DrawRectangle(p, new Rectangle(20, 140, 180, 60));

}

运行结果如下图所示:

图17-16 使用线条样式画线和画矩形

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

相关推荐
VB.Net37 分钟前
17.3.4 颜色矩阵
矩阵·c#·图像
幻想趾于现实5 小时前
C# 装箱和拆箱(以及 as ,is)
开发语言·c#
xcLeigh6 小时前
WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果
c#·wpf·交互
VB.Net6 小时前
17.3.5 添加水印
矩阵·c#·水印
谢大旭6 小时前
ASP.NET Core自定义 MIME 类型配置
后端·c#
鲤籽鲲8 小时前
C# 中 [MethodImpl(MethodImplOptions.Synchronized)] 的使用详解
java·开发语言·c#
xcLeigh8 小时前
WPF进阶 | WPF 样式与模板:打造个性化用户界面的利器
ui·c#·wpf
VB.Net9 小时前
17.2 图形绘制6
c#·图像
谢大旭13 小时前
ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务
开发语言·后端·c#·asp.net