首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET Framework >

C# 串话柄时心电图

2013-04-26 
C# 串口实时心电图我们的要求是1秒钟512个点,把这一秒钟的数据平均显示在1秒的5个大格子里,这个应该怎么控

C# 串口实时心电图
C# 串话柄时心电图我们的要求是1秒钟512个点,把这一秒钟的数据平均显示在1秒的5个大格子里,这个应该怎么控制X轴的移动呢?
我现在是每2毫秒刷新一次(画一个点)这样1秒只能画500个点,2秒刷新一次界面闪屏很厉害,请各位大侠指点1、2.我的基本代码是这样的
   private void Form1_Load(object sender, EventArgs e)
        {
              ptlist = new Point[this.pictureBox1.Width];
              Point pt;
              for (int i = 0; i < this.pictureBox1.Width; i++)
              {
                  pt = new Point();
                  pt.X = i;
                  pt.Y = 255;
                  ptlist[i] = pt;
               }        
            timer1.Enabled = true;
            timer1.Interval = 2;
        }
private void timer1_Tick(object sender, EventArgs e)
        {
          //pictureBox1画图区域
           //ptlist         
           //alECGFisrt接收到的心电数据
          DrawLineS(Color.Blue, pictureBox1, ptlist, alECGFisrt);

        }
public void DrawLineS(Color color,PictureBox picbox, Point[] ptlist, ArrayList alECGFisrt)
        {
          mybitmap = new Bitmap(picbox.Width, picbox.Height);//设定位图大小
            Graphics doublebufferg = Graphics.FromImage(mybitmap);//从位图上获取画布
            doublebufferg.Clear(Color.White);//用背景色刷新
            //pictureBox1填充为白色,便于显示图像 
            Rectangle rect = new Rectangle(0, 0, picbox.Width, picbox.Height);
          doublebufferg.FillRectangle(new SolidBrush(Color.White), rect);

          //画网格线
            SetXAxis(ref doublebufferg, picbox);
            SetYAxis(ref doublebufferg, picbox);
            ////绘制实时随机曲线
            Point temp = new Point();


            int ptX = 0;
            for (int j = 1; j < picbox.Width-1; j++)
            {
                temp = ptlist[j + 1];
                ptX = temp.X - 1;
                ptlist[j] = new Point(ptX, temp.Y);
            }
            Point lastpt = new Point();
            lastpt.X = picbox.Width;
            if (alECGFisrt.Count > 0)
            {
                lastpt.Y = Convert.ToInt32(alECGFisrt[0].ToString());
                alECGFisrt.RemoveAt(0);//画一个点移除出alECGFisrt
            }
            else
                lastpt.Y = 255;//255是基线
            ptlist[picbox.Width - 1] = lastpt;//替换最后一个点
            doublebufferg.DrawLines(new Pen(Color.Red, 2), ptlist);

            //将缓冲中的位图绘制到窗体上
            Graphics g1 = picbox.CreateGraphics();//创建 PictureBox窗体的画布
            g1.Clear(Color.White);
           g1.DrawImage(mybitmap, 0, 0);
        } C# 心电图 GDI+
[解决办法]
无需移动,双缓冲离屏绘制
[解决办法]
哎,后边的坐标首先是固定的就屏幕那么大。每次获得固定的长度绘制,下次从上次的结束出开始画。
[解决办法]
picturebox已经是双缓冲了.

楼主的一个画面可以设置画1000点.
每2ms就画 
最新收到的数据总数-1000 到 最新收到的数据总数 
这个范围就可以了.

热点排行