实时波形图

时间:2013-01-19 12:22:27

标签: .net wpf graphics gdi+ waveform

我试图想出一个好的设计来绘制.Net中的实时波形。每隔x毫秒添加一个样本,当波形位于页面末尾时,它会重置为开头并开始覆盖现有波形(如ECG心率监视器中)。

过去我以一种非常简单的方式做到了这一点:只需以固定的间隔为每个样本绘制一个像素。虽然这个工作没问题,但是当我尝试添加任何类型的背景时,我很快就遇到了麻烦,例如:网格。当样本/像素与网格重叠时,在第二遍中清除它变得很复杂,因为你不能用白色像素覆盖它。

使用WPF而不是Winforms会更容易,因为我可以将波形作为一个元素,当我移动元素时,背景应该自动保留/重绘。

你会如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以将曲线放入PathGeometry控件的StreamGeometry属性中的Data(或Path)。

<Canvas>
    <Path Stroke="Black" StrokeThickness="3">
        <Path.Data>
            <PathGeometry>
                <PathFigure x:Name="figure" IsClosed="False">
                    <PathFigure.Segments>
                        <PolyLineSegment x:Name="polyline"/>
                    </PathFigure.Segments>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
</Canvas>

在代码隐藏中更新PathGeometry:

figure.StartPoint = ...;
polyline.Points.RemoveAt(...);
polyline.Points.Add(...);