我正在使用C#Graphics绘制心电图。我使用drawlines方法绘制曲线。但线关节看起来很破碎。我尝试了所有可用的平滑模式和capstyle选项,没有帮助。这里是sample graph1和sample 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();
}
}
}
}
}
答案 0 :(得分:1)
为避免折线,尤其是在以锐角绘制线条时,您需要为这些属性选择正确的值:
p.MiterLimit = p.Width * 1.25f;
p.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;
MiterLimit的默认值为10f,这对细线很重要! LineJoin也有一个默认(斜接),没有帮助。
您还应该实验稍微使用MiterLimit
值(保持在笔的宽度范围内),也可以使用Pen
&# 39;宽度本身; 注意 Pen.Width
是float
所以你可以将它提升到1.25左右。
如果你真的在谈论某些地方的脏污外观,这是由于抗锯齿;通常是一件好事,但对于更清晰的线条,请将其关闭为Graphics对象:
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None
LineCaps
仅适用于行序列的起点和终点,因此它们对于图表无关紧要。
答案 1 :(得分:0)
你画的是短线。这就是你得到这个结果的原因。而不是 DrawLines(),尝试使用DrawCurve()。
g.DrawCurve(p, ps.ToArray());