C#图形绘制线绘制了虚线

时间:2014-06-08 11:37:55

标签: c# graphics antialiasing

我正在使用C#Graphics绘制心电图。我使用drawlines方法绘制曲线。但线关节看起来很破碎。我尝试了所有可用的平滑模式和capstyle选项,没有帮助。这里是sample graph1sample graph2

代码如下:

private void DrawCurve(Graphics g, cPoint[] data)
{
    List<Point> ps = new List<Point>();

    for (int i = 0; i < data.Length - 1; i++)
    {
        int x = data[i].x;
        int y = data[i].y;

        if (x > 0 && x < (Width))
        {
            ps.Add(new Point(x, y));
        }
        else if (x > Width)
        {
            using (Pen p = new Pen(Color.Yellow))
            {
                if (ps.Count > 0)
                {
                    g.DrawLines(p, ps.ToArray());
                    ps.Clear();
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

为避免折线,尤其是在以锐角绘制线条时,您需要为这些属性选择正确的值:

p.MiterLimit = p.Width * 1.25f;
p.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;

MiterLimit的默认值为10f,这对细线很重要! LineJoin也有一个默认(斜接),没有帮助。

您还应该实验稍微使用MiterLimit值(保持在笔的宽度范围内),也可以使用Pen&# 39;宽度本身; 注意 Pen.Widthfloat所以你可以将它提升到1.25左右。

如果你真的在谈论某些地方的脏污外观,这是由于抗锯齿;通常是一件好事,但对于更清晰的线条,请将其关闭为Graphics对象:

e.Graphics.SmoothingMode =  System.Drawing.Drawing2D.SmoothingMode.None

LineCaps仅适用于行序列的起点和终点,因此它们对于图表无关紧要。

答案 1 :(得分:0)

你画的是短线。这就是你得到这个结果的原因。而不是 DrawLines(),尝试使用DrawCurve()

g.DrawCurve(p, ps.ToArray());
相关问题