`
wyf
  • 浏览: 424791 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

.NET画实时直方图

 
阅读更多
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace DrawChart
{
    public partial class DrawChart : UserControl
    {
        #region 构造函数
        public DrawChart()
        {
            InitializeComponent();
            DrawBackGround();
        }
        #endregion

        #region   相关属性设置
        private string strTitleName = "";
        /// <summary>
        ///  设置直方图名称
        /// </summary>
        [Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置直方图名称")]
        public string My_TitleName
        {
            get { return strTitleName; }
            set
            {
                strTitleName = value;
                lblTitle.Text = strTitleName;
            }
        }

        private int colorDesign = 0;
        /// <summary>
        ///  设置设计直方图背景色
        /// </summary>
        [Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置静态设计直方图背景色")]
        public int My_DesignColor
        {
            get { return colorDesign; }
            set
            {
                colorDesign = value;
                DrawBackGround();
            }
        }

        private int colorActual = 0;
        /// <summary>
        /// 绘图颜色
        /// </summary>
        [Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置实际作图直方图背景色")]
        public int My_ActualColor
        {
            get { return colorActual; }
            set
            {
                colorActual = value;
            }
        }

        private bool bolUp = true;
        /// <summary>
        /// 绘制直方图模式 true 防沙模式;false 酸化模式
        /// </summary>
        [Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("绘制直方图模式 true 防沙模式;false 酸化模式")]
        public bool My_DrawChartWithUp
        {
            get { return bolUp; }
            set
            {
                bolUp = value;
            }
        }
        #endregion

        #region   作图属性
        private float fltDesignData = 0F;
        /// <summary>
        ///  设置设计值
        /// </summary>
        [Bindable(true), Category("作图属性"), DefaultValue(""), Description("设置设计值")]
        public float My_DesignData
        {
            get { return fltDesignData; }
            set
            {
                fltDesignData = value;
                lblDesign.Text = "设计:"+fltDesignData.ToString();
            }
        }

        private float fltActualData = 0F;
        /// <summary>
        ///  设置实际值
        /// </summary>
        [Bindable(true), Category("作图属性"), DefaultValue(""), Description("设置实际值")]
        public float My_ActualData
        {
            get { return fltActualData; }
            set
            {
                fltActualData = value;
               
                if (bolUp)
                {
                    SetRealTimeData(fltActualData.ToString());
                    DrawRealTimeChart(GetRectF(fltActualData));
                }
                else
                {
                    if (fltActualData < fltDesignData)
                    {
                        SetRealTimeData(Convert.ToString((fltDesignData - fltActualData)));
                        DrawRealTimeChart(GetRectF(fltDesignData - fltActualData));
                    }
                    else
                    {
                        SetRealTimeData("0");
                    }
                }
            }
        }
        #endregion

        #region   私有变量
        private Color colorFrame = Color.Cyan;//边框颜色 默认
        private delegate void SetImageToPnl(Image img1);//委托方法
        private delegate void SetRealData(string strRealTimeData);//设置实时数据
        #endregion                  

        #region   私有方法
        #region 初始化背景图片
        private void DrawBackGround()
        {
            Image img = new Bitmap(pnlChart.Width, pnlChart.Height);
            using (Graphics g =Graphics.FromImage(img))
            {
                //画矩形
                g.DrawRectangle(new Pen(Brushes.Cyan,1.9F), new Rectangle(2, 2, (pnlChart.Width - 4) / 2, pnlChart.Height - 6));
                //填充矩形
                SolidBrush bh = new SolidBrush(ColorTranslator.FromOle(colorDesign));
                g.FillRectangle(bh, new Rectangle(3, 3, (pnlChart.Width - 4) / 2 - 2, pnlChart.Height - 7));
                //画边框
                g.DrawLine(new Pen(Brushes.Cyan, 1.9F), new Point((pnlChart.Width - 4) / 2 + 2, pnlChart.Height - 4), new Point(pnlChart.Width - 4, pnlChart.Height - 4));
                g.Dispose();       
            }
            SetBackGroundImage(img);
        }
        #endregion

        #region   重绘
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            DrawRealTimeChart(GetRectF(fltActualData));
        }
        #endregion

        #region   实时绘制柱状图
        private void DrawRealTimeChart(RectangleF rtf)
        {
            try
            {
                using (Graphics g = pnlChart.CreateGraphics())
                {
                    SolidBrush bh = new SolidBrush(ColorTranslator.FromOle(colorActual));
                    SolidBrush bhWithe = new SolidBrush(Color.White);

                    g.FillRectangle(bhWithe, new RectangleF((float)(pnlChart.Width - 4) / 2 + 2, 4, (float)(pnlChart.Width - 4) / 2, (float)(pnlChart.Height - 8)));

                    g.FillRectangle(bh, rtf);
                    g.Dispose();
                }
            }
            catch
            { }
        }
        #endregion

        #region   计算填充矩形
        private RectangleF GetRectF(float fltData)
        {
            RectangleF rtf = new RectangleF();

            float fltTemp = (pnlChart.Height - 8) / fltDesignData;

            if (fltActualData <= 0)
            {
                rtf = new RectangleF(0F, 0F, 0F, 0F);
            }
            else if (fltActualData > 0 && fltActualData < fltDesignData)
            {
                rtf = new RectangleF((float)(pnlChart.Width - 4) / 2+2, (float)(pnlChart.Height - 4 - fltData * fltTemp), (float)(pnlChart.Width - 4) / 2-2,fltTemp*fltData-0.8F);
            }
            else if (fltActualData > fltDesignData)
            {
                rtf = new RectangleF((float)(pnlChart.Width - 4) / 2+2, 4, (float)(pnlChart.Width - 4) / 2-2, (float)(pnlChart.Height - 8.8F));
            }
            return rtf;
        }
        #endregion

        #region   托管方法
        private void SetBackGroundImage(Image img)
        {
            if (pnlChart.InvokeRequired)
            {
                SetImageToPnl stp = new SetImageToPnl(SetBackGroundImage);
                Invoke(stp, new object[] { img });
            }
            else
                pnlChart.BackgroundImage = img;
        }

        private void SetRealTimeData(string str)
        {
            if (lblActual.InvokeRequired)
            {
                SetRealData stp = new SetRealData(SetRealTimeData);
                Invoke(stp, new object[] { str });
            }
            else
                lblActual.Text = "Actual:"+str;
        }
        #endregion
        #endregion

        #region   私有事件 绘图区域Size改变时 触发重绘事件
        private void pnlChart_SizeChanged(object sender, EventArgs e)
        {
            DrawBackGround();
        }
        #endregion

        #region 当绘图区域失去焦点时 触发重绘事件
        private void pnlChart_Paint(object sender, PaintEventArgs e)
        {
            DrawRealTimeChart(GetRectF(fltActualData));
        }
        #endregion
    }
}
 
分享到:
评论

相关推荐

    ASP.net C#绘直方图趋势图正态分布图

    这个是配合SPC质量分析一块用的,单独用也没问题,可以传入相应需要绘图的数据点,就能画出图形 注:使用时需要先建一个image图片,指定图片路径,绘图时图片路径与image中指定图片路径一致就能在网页中显示图形。...

    Asp.net 直方图饼图实现方法WebChart实例

    本实例通过使用webchart来实现直方图及饼图,开发环境VS2005直接运行即可

    Python基于matplotlib绘制栈式直方图的方法示例

    平时我们只对一组数据做直方图统计,这样我们只要直接画直方图就可以了。 但有时候我们同时画多组数据的直方图(比如说我大一到大四跑大学城内环的用时的分布),大一到大四用不同颜色的直方图,显示在一张图上,...

    《Matlab编程实例视频教程系列 31:Matlab作图与动画 ( 绘图 )》课件讲义

    31.7 直方图 31.8 饼图 31.9 阶梯图、散点图、针状图 31.10 填充图、对数图、热图 31.11 函数绘图 31.12 极坐标绘图 31.13 坐标刻度和标签 31.14 极坐标刻度和标签 31.15 多边形绘图 31.16 曲面图汇总 31.17 三维图...

    python flask学生成绩管理系统,包含使用文档

    python flask学生成绩管理系统。... ■ 统计各分数段学生的成绩分布, 画出直方图和饼图。 ○ 录入 ■ 学生所选课程成绩 ○ 修改 ■ 学生所选课程成绩 ○ 删除 ■ 学生所选课程成绩 详细介绍和导入教程如下: ...

    基于PyQt5实现的Windows图像处理桌面应用.zip

    在所实现的21种功能中,既有较初级的灰度变换、伽马校正、均值滤波、中值滤波、直方图均衡化、彩色负片等,有稍高级的Gauss滤波、Butterworth滤波,也有更复杂的Ostu二值化,生成油画,生成素描等。上述所有的功能都...

    SPixel:在C#和Windows窗体中创建的图像编辑器

    查看图像属性,直方图和统计信息 颜色,通道和HSL过滤 亮度,对比度和饱和度调整 伽玛校正和色调修改 模糊和锐化 应用油画,佩林噪声,抖动和像素画等效果 剪切,复制和粘贴图像 撤消功能 拖放功能 支持常见的图像...

    vc++ 应用源码包_1

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    vc++ 应用源码包_2

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    vc++ 应用源码包_6

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    vc++ 应用源码包_5

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    vc++ 应用源码包_3

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

    vc++ 开发实例源码包

    服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...

Global site tag (gtag.js) - Google Analytics