WPF开发之利用DrawingVisual绘制高性能曲线图

2022-04-17 03:40:39

项目中涉及到了心率检测,而且数据量达到了百万级别,通过WPF实现大数据曲线图时,尝试过最基础的Canvas来实现,但是性能堪忧,而且全部画出来也不实际。同时也尝试过找第三方的开源库,但是因为曲线图涉及到很多细节功能,第三方的肯定也没法满足。没办法,只能自己实现,上网查找后发现DrawingVisual这个玩意可以实现高性能画图,同时再搭配局部显示,这样就能实现自己想要的效果。话不多说,今天把大致的实现思路写一下,就不直接把项目的源码贴出来,写个简单的Demo就好了。

是放一个Canvas来填充,代码如下

<Grid>    <local:CruveChartDrawingVisual x:Name="curve" Margin="0,15,0,20" />    <ScrollViewer        Name="scroll"        HorizontalScrollBarVisibility="Auto"        ScrollChanged="ScrollViewer_ScrollChanged"        VerticalScrollBarVisibility="Disabled">        <Canvas x:Name="canvas" Height="1" />    </ScrollViewer></Grid>

4、接着就是后台代码,比较简单,就是自动生成一个List,然后传给自定义控件,Canvas的宽度直接设置为List的长度,因为这里是水平方向一个像素点画一个点,然后滑动条滑动时再将对应的偏移值传递到控件,再通过偏移值更新视图

public partial class MainWindow : Window{    private bool isAdd = true;    public MainWindow()    {        InitializeComponent();    }    private void Window_Loaded(object sender, RoutedEventArgs e)    {        List<int> lists = new List<int>();        int temp = 20;        for (int i = 0; i < 60 * 60; i++)        {            if (isAdd)            {                lists.Add(temp);                temp ++;            }            else            {                lists.Add(temp);                temp --;            }            if (temp == 90) isAdd = false;            if (temp == 10) isAdd = true;        }        canvas.Width = lists.Count;        curve.SetupData(lists);    }    private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)    {        curve.OffsetX(scroll.HorizontalOffset);    }}

5、运行效果如下,滑动条拖到哪里就显示哪里,这样就算数据量再大也没问题,这种曲线图跟常规的曲线图有点差别,这里更多的是提供一种思路

WPF开发之利用DrawingVisual绘制高性能曲线图

以上就是WPF开发之利用DrawingVisual绘制高性能曲线图的详细内容,更多关于WPF DrawingVisual绘制曲线图的资料请关注我们其它相关文章!