具有圆形边缘的 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;
我正在绘制一个带有相交线的 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;