C#中使用DynamicDataDisplay来画多条颜色不一样的线

    xiaoxiao2022-06-23  194

    故事初衷:因为要发送几次数据做比较,所以不得已想办法改变每次画的线的颜色,然后利用赋一个RAGB颜色值的随机数来定义线条的颜色,具体代码见下:

    private void ReceivedDataHandler(object obj) { // 接收缓存 List<byte> recvBuffer = new List<byte>(); recvBuffer.AddRange((List<byte>)obj); if (recvBuffer.Count == 0) { return; } // 生成几个随机数 Random RandomNum_First = new Random(Guid.NewGuid().GetHashCode()); System.Threading.Thread.Sleep(RandomNum_First.Next(50)); Random RandomNum_Sencond = new Random(Guid.NewGuid().GetHashCode()); // 为了在白色背景上显示,尽量生成深色,进行三色的赋值 int int_Red = RandomNum_First.Next(256); int int_Green = RandomNum_Sencond.Next(256); int int_Blue = (int_Red + int_Green > 400) ? 0 : 400 - int_Red - int_Green; int_Blue = (int_Blue > 255) ? 255 : int_Blue; System.Drawing.Color color = System.Drawing.Color.FromArgb(int_Red, int_Green, int_Blue); //颜色数据格式的转换 System.Windows.Media.Color color1 = System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B); // 必须应当保证全局缓冲区的数据能够被完整地备份出来,这样才能进行进一步的处理。 shouldClear = true; string RecvData = Utilities.BytesToText(recvBuffer, receiveMode, serialPort.Encoding); string[] RecData = RecvData.Split(' '); this.Dispatcher.Invoke(new Action(() => { if (showReceiveData) { int N =RecData.Length; double[] x = new double[N]; double[] y = new double[N]; for (int i = 0; i < N; i++) { x[i] =i; y[i] = Convert.ToDouble(RecData[i]); } // 创建数据源 var xDataSource = x.AsXDataSource(); var yDataSource = y.AsYDataSource(); CompositeDataSource compositeDataSource = xDataSource.Join(yDataSource); //添加图像到plotter plotter.AddLineGraph(compositeDataSource, color1, 1); // 使可见 plotter.FitToView(); } dataRecvStatusBarItem.Visibility = Visibility.Collapsed; }));

     


    最新回复(0)