具有圆形边缘的 DrawPath 点

DrawPath Points with rounded edges

我正在绘制一个带有相交线的 GraphicPant,我想知道这些线的边缘是否可以圆化。

我画的代码是:

Graphics G = e.Graphics;
GraphicsPath gp = new GraphicsPath();
gp.AddLine((float)(line.startX), (float)(line.startY), (float)(line.endX), (float)(line.endY));
gp.CloseFigure();

using (Pen pen = new Pen(Color.DarkGray, 0.0001f))
   {
    G.SmoothingMode = SmoothingMode.AntiAlias;
    G.Clear(Color.White);
    G.DrawPath(pen, gp)
   }

如果它看起来像这样:

尝试:

pen.StartCap = LineCap.Round;
pen.EndCap = LineCap.Round;

使用这么小的 Pen.Width 将导致一条线只有 一个 像素 'thick'。但是 像素根据定义总是正方形 。因此,如果您使用非抖动或反抗软件进行放大,它 看起来 就好像末端是方形的。

但它们确实没有形状,因为它们没有真实尺寸。相反,它们的宽度是一个 虚拟 数字:使用的一个像素只是 default 使用的最小值,因此该行不会 消失.

所以:是的,Pen.Width 确实很重要。

因此:请将其设置为大于 1 的合理数字,您将看到圆形端点..

您也可以将 Graphics 对象缩放到合适的数字,您也会看到圆形的末端。如果您想尝试这样做,请不要忘记调整坐标以适应极端缩放!


对于 AddLines 创建的几行(或者 AddPolygon 如果你认真对待 CloseFigure)也设置 LineJoin:

pen.LineJoin = LineJoin.Round;
pen.EndCap = LineCap.Round;
pen.StartCap = LineCap.Round;