C#.net GDI作曲线图

从MDB文件中读取数据做曲线图

 public void initGDI()
        {
            //画图初始化
            Bitmap bmap = new Bitmap(pcWendu.Width, pcWendu.Height);
            Graphics gph = Graphics.FromImage(bmap);
            gph.Clear(Color.White);

            PointF cpt = new PointF(40,390);//中心点
            PointF[] xpt = new PointF[3] { new PointF(pcWendu.Width, cpt.Y), new PointF(pcWendu.Width - 15, cpt.Y - 8), new PointF(pcWendu.Width - 15, cpt.Y + 8) };//x轴三角形
            PointF[] ypt = new PointF[3] { new PointF(cpt.X, cpt.X - 25), new PointF(cpt.X - 8, cpt.X - 10), new PointF(cpt.X + 8, cpt.X - 10) };//y轴三角形
            //画x轴
            gph.DrawLine(Pens.Black, cpt.X, cpt.Y, pcWendu.Width - 10, cpt.Y);
            gph.DrawPolygon(Pens.Black, xpt);
            gph.FillPolygon(new SolidBrush(Color.Black), xpt);
            gph.DrawString("时间", new Font("宋体", 10), Brushes.Black, new PointF(pcWendu.Width - 35, cpt.Y + 10));
            //画y轴
            gph.DrawLine(Pens.Black, cpt.X, cpt.Y, cpt.X, cpt.X - 10);
            gph.DrawPolygon(Pens.Black, ypt);
            gph.FillPolygon(new SolidBrush(Color.Black), ypt);
            IOValue("0", cBSelect.Text, out string KuBunn);
            gph.DrawString(KuBunn, new Font("宋体", 10), Brushes.Black, new PointF(0, 7));

            //画x轴坐标
            float[] LactionZhD = new float[24]; //00:00
            float[] LactionBD = new float[24]; //30:00
            for (int i = 0; i < 24; i++)
            {
                gph.DrawString((i + 1).ToString("00") + ":00", new Font("宋体", 8, FontStyle.Bold), Brushes.Black, new PointF(cpt.X + i * 46 + 18, cpt.Y + 20));
                gph.DrawLine(Pens.Gray, cpt.X + i * 46 + 37, cpt.Y, cpt.X + i * 46 + 37, cpt.X);
                LactionZhD[i] = cpt.X + i * 46 + 35;
            }
            for (int i = 0; i < 24; i++)
            {
                gph.DrawString(i.ToString("00") + ":30", new Font("宋体", 8, FontStyle.Bold), Brushes.Black, new PointF(cpt.X + i * 46 - 5, cpt.Y + 5));
                gph.DrawLine(Pens.Gray, cpt.X + i * 46 + 14, cpt.Y, cpt.X + i * 46 + 14, cpt.X);
                LactionBD[i] = cpt.X + i * 46 + 14;
            }
            int YJianju = 0;
            int Y = 0;
            int YShuzhi = 0;
            float YKedu = 0f;
            if (cBSelect.Text == "温度")
            {
                Y = 6; YJianju = 5; YShuzhi = 55; YKedu = 11;
            }
            if (cBSelect.Text == "湿度")
            {
                Y = 10; YJianju = 10; YShuzhi = 35; YKedu = 3.5f;
            }
            if (cBSelect.Text == "粉尘")
            {
                Y = 5; YJianju = 2500; YShuzhi = 86; YKedu = 0.0344f;
            }

            //画y轴刻度
            for (int i = 0; i <= Y; i = i + 1)
            {
                gph.DrawString((YJianju * i).ToString(), new Font("宋体", 9, FontStyle.Bold), Brushes.Black, new PointF(cpt.X - 35, cpt.Y - YShuzhi * (i) - 5));
                gph.DrawLine(Pens.Black, cpt.X - 3, cpt.Y - YShuzhi * i, cpt.X, cpt.Y - YShuzhi * i);
                if (i != 0)
                {
                    gph.DrawLine(Pens.Gray, cpt.X, cpt.Y - YShuzhi * i, pcWendu.Width - 28, cpt.Y - YShuzhi * i);
                }
            }
            float[] ZhDlist;
            float[] BDlist;
            DataKaBu(datatime, cBSelect.Text, out ZhDlist, out BDlist);

            for (int i = 0; i < 24; i++)
            {
                if (ZhDlist[i].ToString() != "0")
                {
                    gph.FillEllipse(new SolidBrush(Color.Black), LactionZhD[i], cpt.Y - ZhDlist[i] * YKedu, 3, 3); //画整点数值
                    gph.DrawString(ZhDlist[i].ToString("0.0"), new Font("宋体", 7), Brushes.Black, new PointF(LactionZhD[i] - 6, cpt.Y - ZhDlist[i] * YKedu + 3));
                }
                if (BDlist[i].ToString() != "0")
                {
                    gph.FillEllipse(new SolidBrush(Color.Black), LactionBD[i], cpt.Y - BDlist[i] * YKedu, 3, 3);//画半点数值
                    gph.DrawString(BDlist[i].ToString("0.0"), new Font("宋体", 7), Brushes.Black, new PointF(LactionBD[i] - 6, cpt.Y - BDlist[i] * YKedu - 8));
                }
            }
            Pen Ypen = new Pen(Color.Blue, 2);
            for (int i = 0; i < 24; i++)
            {
                if (ZhDlist[i].ToString("0.0") != "0.0" & BDlist[i].ToString("0.0") != "0.0")
                {
                    gph.DrawLine(Ypen, LactionBD[i], cpt.Y - BDlist[i] * YKedu, LactionZhD[i], cpt.Y - ZhDlist[i] * YKedu);
                }
            }
            for (int i = 0; i < 23; i++)
            {
                if (ZhDlist[i].ToString("0.0") != "0.0" && BDlist[i + 1].ToString("0.0") != "0.0")
                {
                    gph.DrawLine(Ypen, LactionZhD[i], cpt.Y - ZhDlist[i] * YKedu, LactionBD[i + 1], cpt.Y - BDlist[i + 1] * YKedu);
                }
            }
            //画警戒线
            Pen p = new Pen(Color.Red, 4);
            if (cBSelect.Text == "温度")
            {
                gph.DrawLine(p, cpt.X, cpt.Y - float.Parse(AppPublic.P_wdMax) * YKedu, pcWendu.Width - 28, cpt.Y - float.Parse(AppPublic.P_wdMax) * YKedu);
                gph.DrawLine(p, cpt.X, cpt.Y - float.Parse(AppPublic.P_wdMin) * YKedu, pcWendu.Width - 28, cpt.Y - float.Parse(AppPublic.P_wdMin) * YKedu);
            }
            if (cBSelect.Text == "湿度")
            {
                gph.DrawLine(p, cpt.X, cpt.Y - float.Parse(AppPublic.P_sdMax) * YKedu, pcWendu.Width - 28, cpt.Y - float.Parse(AppPublic.P_sdMax) * YKedu);
                gph.DrawLine(p, cpt.X, cpt.Y - float.Parse(AppPublic.P_sdMin) * YKedu, pcWendu.Width - 28, cpt.Y - float.Parse(AppPublic.P_sdMin) * YKedu);
            }
            pcWendu.Image = bmap; //保存输出图片
        }

   /// <summary>
        /// 获取00:00=>30:00  30:00=>00:00 平均值
        /// </summary>
        /// <param name="idatatime"></param>
        private void DataKaBu(string idatatime, string icmboxVelue, out float[] ZhDlist, out float[] BDlist)
        {
            string KuBunn = "";
            IOValue("1", icmboxVelue, out KuBunn);
            string pmFilename = Application.StartupPath + @"\Data\D-" + idatatime + ".MDB";
            ZhDlist = new float[24];  //30:00
            BDlist = new float[24];   //00:00
            if (System.IO.File.Exists(pmFilename) == false)
            {
                MessageBox.Show(idatatime + ".MDB文件不存在,请确认是否是稼働日","" , MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                dateTimePicker.Focus();
            }else
            {
                MDBHelp mdbHelp = new MDBHelp(pmFilename);
                mdbHelp.Open();
                for (int i = 0; i < 24; i++)
                {
                    DataTable DTbDian = mdbHelp.GetDataSet("select sum(数字) as Ssum ,count(数字) as Ccount from (select right(時間,8) as T1,数字 from T_Monitor where 区分 = '" + KuBunn + "') T where T.T1 between '" + i + ":00:00' and '" + i + ":30:00'");
                    if (DTbDian.Rows[0]["Ccount"].ToString() != "0")
                    {
                        BDlist[i] = float.Parse(DTbDian.Rows[0]["Ssum"].ToString()) / float.Parse(DTbDian.Rows[0]["Ccount"].ToString());
                    }
                    else
                    {
                        BDlist[i] = float.Parse("0.0");
                    }
                }
                DataTable DTZhDian;
                for (int i = 0; i < 24; i++)
                {
                    if (i == 23)
                    {
                        DTZhDian = mdbHelp.GetDataSet("select sum(数字) as Ssum ,count(数字) as Ccount from (select right(時間,8) as T1,数字 from T_Monitor where 区分 = '" + KuBunn + "') T where T.T1 between '" + i + ":30:00' and '" + i + ":59:59'");
                    }
                    else
                    {
                        DTZhDian = mdbHelp.GetDataSet("select sum(数字) as Ssum ,count(数字) as Ccount from (select right(時間,8) as T1,数字 from T_Monitor where 区分 = '" + KuBunn + "') T where T.T1 between '" + i + ":30:00' and '" + (i + 1) + ":00:00'");
                    }

                    if (DTZhDian.Rows[0]["Ccount"].ToString() != "0")
                    {
                        ZhDlist[i] = float.Parse(DTZhDian.Rows[0]["Ssum"].ToString()) / float.Parse(DTZhDian.Rows[0]["Ccount"].ToString());
                    }
                    else
                    {
                        ZhDlist[i] = float.Parse("0.0");
                    }
                }
                mdbHelp.Close();
            }
        }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值