簡體   English   中英

C#圖形繪制線繪制虛線

[英]C# graphics drawlines draws broken lines

我正在使用C#圖形繪制ECG圖形。 我使用畫線法繪制曲線。 但是,線接頭看起來壞了。 我嘗試了平滑模式和capstyle的所有可用選項,沒有任何幫助。 這是示例graph1示例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();
                }
            }
        }
    }
}

為了避免折線,尤其是在以銳角繪制線時,您需要為這些屬性選擇正確的值:

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

MiterLimit的默認值為10f,對於細線來說這是很大的方法! LineJoin還具有默認設置(斜接),該默認設置無濟於事。

你也應該嘗試用一下MiterLimit值(保持鋼筆的寬度的范圍),也許還與你的Pen的寬度本身; 注意Pen.Width是一個float因此您可以將其提高到1.25左右。

如果您實際上是在談論某些地方的污跡,那是由於抗鋸齒; 通常是一件好事,但是對於更清晰的線條,請為您的Graphics對象將其關閉:

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

LineCaps僅適用於線序的起點和終點,因此它們對圖形沒有太大影響。

您正在畫短線。 這就是為什么您得到該結果的原因。 嘗試使用DrawCurve()代替DrawLines ()

g.DrawCurve(p, ps.ToArray());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM