标题:论坛第一帖,关于如何用picturebox_paint作曲线
只看楼主
fishrd
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-2
结帖率:0
已结贴  问题点数:20 回复次数:6 
论坛第一帖,关于如何用picturebox_paint作曲线
初学者,在学着做一个程序,碰到个问题无法解决,特来请教大家

现在有电机返回的数据流,里面包括电流,可以提取再来将将电流显示在textbox6中
                mcurrent = (readBuffer[8] + readBuffer[9] * 256) / 1000;
                textBox6.Text = mcurrent.ToString();
现在要求电流值在picturebox中画出曲线,横坐标为时间轴,竖坐标为电流值(mcurrent)


现在要求在里面将mcurrent画出来,查了一些资料基本是这样的
程序代码:
     private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            //
            //
        }

才疏学浅,特地注册前来向大家请教
搜索更多相关主题的帖子: paint 曲线 picturebox 
2010-09-02 21:51
fishrd
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-2
得分:0 
有人吗,还请指教,不胜感激
2010-09-02 21:56
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:10 
使用g.DrawLines方法就可以了。
参数是一个画笔和一个Point数组。
先创建一个Pen。可以直接使用Pens下的Pen.
你把所有的mcurrent 点都添加到一个集合中,然后取出Point[],
然后传给g.DrawingLines就可以了。
-----------------------------------------------------------------------
2010-09-02 22:33
fishrd
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-2
得分:0 
以下是引用zhoufeng1988在2010-9-2 22:33:09的发言:

使用g.DrawLines方法就可以了。
参数是一个画笔和一个Point数组。
先创建一个Pen。可以直接使用Pens下的Pen.
你把所有的mcurrent 点都添加到一个集合中,然后取出Point[],
然后传给g.DrawingLines就可以了。
-----------------------------------------------------------------------
可是mcurrent是取不完的 因为只要开机数据流就一直在输出,那么电流数组也一直会有
2010-09-03 07:42
fishrd
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-2
得分:0 
有人能给出具体点的代码吗
2010-09-03 09:37
Anne_Zhang
Rank: 2
等 级:论坛游民
威 望:1
帖 子:27
专家分:94
注 册:2010-4-10
得分:0 
下面给你写了一个代码,采用的方式是显示满5个点后,后面接收的数据会在最后一个显示,前面的四个会向前移一格,你也可以采用另一个方式就是显示满5个点后再从重从头开始显示的方式,这个具体看你自已的需要了
 int step = 5;//一个画面容许显示的点数
        List<int> listY = null;
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            pictureBox1.Refresh();
            Graphics g = pictureBox1.CreateGraphics();
            Random random = new Random();
            listY.Add(random.Next(300));
            List<Point> drawP = new List<Point>();
            if (listY.Count < step)
            {
                for (int i = 0; i < listY.Count; i++)
                {
                    drawP.Add(new Point(i * 60, listY[i]));
                }
            }
            else
            {
                for (int i = 0; i < step; i++)
                {
                    drawP.Add(new Point(i * 60, listY[listY.Count - i - 1]));
                }
            }
            for (int i = 0; i < drawP.Count; i++)
            {
                g.FillEllipse(Brushes.Blue, drawP[i].X - 0.5f, drawP[i].Y - 0.5f, 1, 1);
            }
            if (drawP.Count > 1)
                g.DrawLines(Pens.Red, drawP.ToArray());
            g.Dispose();
            System.Threading.Thread.Sleep(1000);
        }
2010-09-04 17:11
Anne_Zhang
Rank: 2
等 级:论坛游民
威 望:1
帖 子:27
专家分:94
注 册:2010-4-10
得分:10 
上面的方法是给你一个思路,你如果要显示图,建议你不要在 pictureBox1_Paint中进行绘画,Paint中刷新的速度很快的
2010-09-04 17:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-317562-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035030 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved