使用钢笔绘制线条和形状
一。如何:使用钢笔绘制线条
若要绘制线条,需要 Graphics 对象和 Pen 对象。Graphics 对象提供 DrawLine 方法,而 Pen 对象则存储线条的特征,如颜色和宽度。
示例
下面的示例绘制一条从 (20, 10) 到 (300, 100) 的直线。第一条语句使用 Pen 类构造函数创建黑色钢笔。传递给 Pen 构造函数的参数之一是用 FromArgb 方法创建的 Color 对象。用于创建 Color 对象的值(255、0、0、0)对应于颜色的 alpha、红色、绿色和蓝色分量。这些值定义不透明的黑色钢笔。
Pen pen = new Pen(Color.FromArgb(255, 0, 0, 0));
e.Graphics.DrawLine(pen, 20, 10, 300, 100);
编译代码
前面的示例是为使用 Windows 窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgs e。
请参见
参考
概念
其他资源
二。如何:使用钢笔绘制矩形若要绘制矩形,需要 Graphics 对象和 Pen 对象。Graphics 对象提供 DrawLine 方法,而 Pen 对象则存储线条的特征,如颜色和宽度。
示例
下面的示例绘制一个左上角位于 (10, 10) 的矩形。该矩形的宽度为 100,高度为 50。传递给 Pen 构造函数的第二个参数表明钢笔的宽度为 5 个像素。
绘制该矩形时,钢笔以矩形边界为中心线居中。因为钢笔的宽度是 5,矩形的边被绘制为 5 个像素宽,因此 1 个像素绘制在边界本身,2 个像素绘制在内侧,2 个像素绘制在外侧。有关钢笔对齐方式的详细信息,请参见如何:设置钢笔的宽度和对齐方式。
下面的插图显示结果矩形。虚线表明当钢笔的宽度为 1 个像素时矩形被绘制的位置。矩形左上角的放大视图显示黑色粗线条以这些虚线为中心线居中。
Pen blackPen = new Pen(Color.FromArgb(255, 0, 0, 0), 5); e.Graphics.DrawRectangle(blackPen, 10, 10, 100, 50);
编译代码
前面的示例是为使用 Windows 窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgs e。
请参见
三。如何:设置钢笔的宽度和对齐方式在创建 Pen 时,可将笔的宽度作为参数之一提供给构造函数。还可用 Pen 类的 Width 属性更改笔的宽度。
理论线条的宽度为 0。当绘制一条 1 个像素宽的线条时,像素以理论线条为中心线分布。如果绘制的线条宽度大于 1 个像素,则这些像素要么以理论线条为中心线分布,要么出现在理论线条的一侧。可设置 Pen 的笔对齐方式属性,以确定用该笔绘制的像素相对于理论线条如何定位。
在下面的代码示例中显示的值 Center、Outset 和 Inset 为 PenAlignment 枚举的成员。
下面的代码示例绘制一段线条两次:一次用宽度为 1 的黑色钢笔,一次用宽度为 10 的绿色钢笔。
改变钢笔的宽度
将 Alignment 属性的值设置为 Center(默认值),以指定用绿色钢笔绘制的像素以理论线条为中心线分布。下面的插图显示结果线条。
![]()
下面的代码示例绘制一个矩形两次:一次用宽度为 1 的黑色钢笔,一次用宽度为 10 的绿色钢笔。
Pen blackPen = new Pen(Color.FromArgb(255, 0, 0, 0), 1); Pen greenPen = new Pen(Color.FromArgb(255, 0, 255, 0), 10); greenPen.Alignment = PenAlignment.Center; // Draw the line with the wide green pen. e.Graphics.DrawLine(greenPen, 10, 100, 100, 50); // Draw the line with the thin black pen. e.Graphics.DrawLine(blackPen, 10, 100, 100, 50);
更改钢笔的对齐方式
将 Alignment 属性的值设置为 Center,以指定用绿色钢笔绘制的像素以矩形边界为中心分布。
下面的插图显示结果矩形。
Pen blackPen = new Pen(Color.FromArgb(255, 0, 0, 0), 1); Pen greenPen = new Pen(Color.FromArgb(255, 0, 255, 0), 10); greenPen.Alignment = PenAlignment.Center; // Draw the rectangle with the wide green pen. e.Graphics.DrawRectangle(greenPen, 10, 100, 50, 50); // Draw the rectangle with the thin black pen. e.Graphics.DrawRectangle(blackPen, 10, 100, 50, 50);创建嵌入钢笔
可通过将上述代码示例中的第三条语句修改为以下语句来更改绿色钢笔的对齐方式:
greenPen.Alignment = PenAlignment.Inset;现在,绿色宽线条中的像素出现在矩形的内侧,如下面的插图所示。
![]()
请参见
四。如何:绘制具有线帽的线条
可用形状多样的线帽来绘制线条的起点或终点。GDI+ 支持多种线帽,如圆形、方形、菱形和箭头。
示例
您可为线条的起点、线条的终点或虚线的短划线指定线帽,分别称为起始线帽、终止线帽和短划线线帽。
下面的示例绘制一端为箭头线帽、另一端为圆形线帽的线条。下面的插图显示产生的线条:
Pen pen = new Pen(Color.FromArgb(255, 0, 0, 255), 8); pen.StartCap = LineCap.ArrowAnchor; pen.EndCap = LineCap.RoundAnchor; e.Graphics.DrawLine(pen, 20, 175, 300, 175);
编译代码
创建一个 Windows 窗体并处理窗体的 Paint 事件。将示例代码粘贴到 Paint 事件处理程序中,并传递 e 作为 PaintEventArgs。
请参见
参考
其他资源
五。 如何:联接线条线条联接点是由两条端点相交或重叠的线条构成的共同区域。GDI+ 提供了三种线条联接样式:斜接、斜切和圆。线条联接样式是 Pen 类的一个属性。当为 Pen 对象指定线条联接样式时,联接样式将应用到任何使用该笔绘制的 GraphicsPath 对象中的所有连接线条。
下面的插图演示产生的斜切线条联接的结果。
![]()
示例
可通过使用 Pen 类的 LineJoin 属性指定线条联接样式。下面的示例演示水平线条和垂直线条之间的斜切线条联接。在下面的代码中,赋给 LineJoin 属性的值 Bevel 为 LineJoin 枚举的一个成员。LineJoin 枚举的其它成员是:Miter 和 Round。
GraphicsPath path = new GraphicsPath(); Pen penJoin = new Pen(Color.FromArgb(255, 0, 0, 255), 8); path.StartFigure(); path.AddLine(new Point(50, 200), new Point(100, 200)); path.AddLine(new Point(100, 200), new Point(100, 250)); penJoin.LineJoin = LineJoin.Bevel; e.Graphics.DrawPath(penJoin, path);
编译代码
前面的示例是为使用 Windows 窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgs e。
请参见
其他资源
六。如何:绘制自定义虚线GDI+ 提供 DashStyle 枚举中列出的几种虚线样式。如果这些标准的虚线样式不能满足需求,则可创建自定义的虚线模式。
示例
若要绘制自定义虚线,请将短划线和间距的长度放在一个数组中,并将该数组指定为 Pen 对象的 DashPattern 属性的值。下面的示例绘制了一条基于 {5, 2, 15, 4} 数组的自定义的虚线。如果将数组元素乘以钢笔的宽度 5,可得到 {25, 10, 75, 20}。显示的短划线的长度在 25 和 75 之间交替,间距的长度在 10 和 20 之间交替。
下面的插图显示结果虚线。请注意,最后一段短划线不得不短于 25 个单位,以便线条的终点落在 (405, 5) 上。
float[] dashValues = { 5, 2, 15, 4 }; Pen blackPen = new Pen(Color.Black, 5); blackPen.DashPattern = dashValues; e.Graphics.DrawLine(blackPen, new Point(5, 5), new Point(405, 5));
七。如何:绘制用纹理填充的线条
您可以不用纯色绘制线条,而用纹理绘制线条。若要绘制带有纹理的直线和曲线,请创建 TextureBrush 对象,并将该 TextureBrush 对象传递给 Pen 构造函数。与该纹理刷相关联的位图用于平铺平面(不可见),然后当钢笔绘制直线或曲线时,钢笔的笔划揭开平铺纹理的某些像素。
示例
下面的示例从文件 Texture1.jpg 创建 Bitmap 对象。位图用于构造 TextureBrush 对象,而 TextureBrush 对象用于构造 Pen 对象。对 DrawImage 的调用将绘制该位图,位图的左上角位于 (0, 0)。对 DrawEllipse 的调用将使用 Pen 对象绘制带纹理的椭圆。
下面的插图显示该位图和带纹理的椭圆。
![]()
Bitmap bitmap = new Bitmap("Texture1.jpg"); TextureBrush tBrush = new TextureBrush(bitmap); Pen texturedPen = new Pen(tBrush, 30); e.Graphics.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height); e.Graphics.DrawEllipse(texturedPen, 100, 20, 200, 100);
编译代码
创建一个 Windows 窗体并处理窗体的 Paint 事件。将上面的代码粘贴到 Paint 事件处理程序中。用一个对您的系统有效的图像替换 Texture.jpg。
请参见