You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制具有正确衔接效果的多颜色线段?

不同颜色线段衔接处的绘制问题

我用以下代码绘制多条线段:

using (var path = new GraphicsPath())
{           
    foreach (var linesByColor in lines.GroupByAdjacent(x => x.Color))
    {           
        path.Reset();       
        foreach (var lines in linesByColor)
        {
            path.AddLine(...);
        }
    
        using (var pen = new Pen(linesByColor.Key))
        {
            g.DrawPath(pen, path);
        }
    }           
}

当前绘制结果(忽略黑色边框):
当前绘制效果

问题出在红色与绿色路径的衔接处,这是因为它们属于不同路径导致的。我期望的效果是:
期望绘制效果

有没有简便的实现方法?我想到一种思路是不绘制线段而是绘制形状并处理衔接,但这可能并不容易。


解决方案

方法1:调整Pen的端点样式

在创建Pen时,设置StartCap和EndCap为LineCap.Square(或根据需求选择LineCap.Round),这样线段的端点会延伸至实际端点外半个线宽的位置,不同颜色路径的衔接处会自然重叠,消除间隙:

using (var path = new GraphicsPath())
{           
    foreach (var linesByColor in lines.GroupByAdjacent(x => x.Color))
    {           
        path.Reset();       
        foreach (var line in linesByColor)
        {
            path.AddLine(line.StartPoint, line.EndPoint);
        }
    
        using (var pen = new Pen(linesByColor.Key))
        {
            // 设置端点样式,消除衔接间隙
            pen.StartCap = LineCap.Square;
            pen.EndCap = LineCap.Square;
            g.DrawPath(pen, path);
        }
    }           
}

方法2:使用DrawLines绘制同颜色线段组

对于每组同颜色的线段,提取所有连续的点数组,用DrawLines绘制,它会自动处理同组内线段的衔接,同时配合端点样式设置,确保不同颜色组之间无缝衔接:

foreach (var linesByColor in lines.GroupByAdjacent(x => x.Color))
{
    // 将同颜色的线段转换为连续点数组
    List<PointF> points = new List<PointF>();
    points.Add(linesByColor.First().StartPoint);
    foreach (var line in linesByColor)
    {
        points.Add(line.EndPoint);
    }
    
    using (var pen = new Pen(linesByColor.Key))
    {
        pen.StartCap = LineCap.Square;
        pen.EndCap = LineCap.Square;
        g.DrawLines(pen, points.ToArray());
    }
}

补充说明

如果衔接处仍有问题,需要确认相邻颜色的线段组的连接点坐标完全一致(无精度误差)。若存在浮点精度问题,可以对连接点做微小的偏移调整,或者使用Point代替PointF(如果不需要浮点精度)。


内容的提问来源于stack exchange,提问作者tigrou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:05:24