`
wyf
  • 浏览: 433389 次
  • 性别: 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实例

    在Asp.NET中,WebChart控件是一种强大的工具,用于创建动态、交互式的图表,包括直方图和饼图。本实例将详细讲解如何利用WebChart控件在VS2005开发环境下实现这两种常见的数据可视化图形。 首先,我们要了解Web...

    C# winform chart 饼图 直方图

    标题中提到的"C# winform chart 饼图 直方图"指的是在C#的WinForm应用程序中使用图表控件来实现饼图和直方图的图形展示。WinForm是.NET Framework提供的一个用于创建桌面应用程序的框架,它允许开发者使用各种控件,...

    C#统计图(直方图)

    在.NET框架中,C#是一种常用的编程语言,用于开发各种应用程序,包括数据可视化软件。...通过学习这个项目,开发者不仅可以掌握直方图的绘制技巧,还能进一步提升在.NET Framework下进行图形编程的能力。

    HSVHistogram(c# 调用openCV画直方图)

    在计算机视觉领域,直方图是一种非常重要的图像分析工具,它可以帮助我们理解图像色彩分布的情况。本主题将深入探讨如何在C#环境中利用OpenCV库(通过EMGU CV的接口)来绘制HSV颜色空间的直方图,以实现图像增强的...

    医院科室病人管理,C#画直方图

    这个名为“医院科室病人管理,C#画直方图”的解决方案提供了一种利用C#编程语言实现的系统,旨在帮助医院更有效地进行数据可视化和科室病人的管理工作。以下是这个项目所涉及的主要知识点: 一、医院信息管理 1. ...

    Chart控件显示一组或多组数据画直方图和折线图

    在.NET框架中,Chart控件是一个强大的工具,用于可视化各种数据类型,包括直方图和折线图。本文将深入探讨如何使用C#语言和Chart控件来展示一组或多组数据,并实现3D模式。 首先,`Chart`控件是Windows Forms应用...

    绘制直方图折线图.7z

    为了绘制直方图,我们需要先计算数据的分布,然后根据分布信息在窗口上画出一个个矩形。而对于折线图,我们需要确定数据点的位置,并用线条将它们连接起来。 在提供的资源中,...

    C#绘制直方图-饼图-曲线图

    C#绘制直方图 饼图 曲线图,单数据直方图取最前两列,第一列为横轴每列名称,第二列为值。多数据直方图第一列为横轴父项名称,然后依次取前一列为横轴每列名称,后一列为值。曲线图取第一列为横轴每列名称,往后每...

    asp.net不用工具纯代码画茎叶图和箱须图

    首先,茎叶图(Stem-and-Leaf Plot)是一种简化版的直方图,它将数据分成两部分:茎(主要数字)和叶(次要数字)。这种图有助于快速识别数据的分布和模式,尤其是对于小到中等规模的数据集。在ASP.NET中,我们可以...

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

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

    MagickNet,ImageMahick的.Net版本

    5. 图像分析:可以计算图像的统计信息,如平均像素值、直方图等,用于图像识别和分析。还能检测图像的特征,如轮廓、文本、线条等。 6. 文本处理:可以将文本添加到图像上,支持自定义字体、大小、位置和旋转。同时...

    WPF基于Oxyplot进行实时绘图

    OxyPlot提供了一套丰富的API,用于创建各种图表类型,如线图、散点图、柱状图等。在WPF中,你可以通过XAML或代码-behind来设置图表。在XAML中,你可以创建一个`oxy:Plot`控件,定义其属性,如标题、轴标签、数据系列...

    Visual C++.NET图像处理编程源代码

    7. **图像处理算法**:源代码可能包含了各种图像处理算法的实现,如边缘检测(Canny、Sobel等)、模板匹配、直方图均衡化、阈值分割等。这些算法对于图像识别、分析和增强非常有用。 8. **图形用户界面(GUI)设计*...

    图片转字符画生成器

    常用的阈值算法包括直方图均衡化和自适应阈值,以确保字符画在视觉上的对比度和清晰度。 ### ASCII Generator 2 简体中文版特点 1. **用户友好界面**:该软件提供了简体中文界面,方便中国用户操作,包括一键转换...

    AE开发统计模块C#

    直方图的计算可能涉及遍历每个像素,统计其亮度或颜色值,并将这些值分配到特定的区间(即直方图的“桶”)中。通过这种方式,我们可以快速了解图层的整体色彩分布。 2. **导出功能**:除了在界面上显示直方图,此...

    画条形图的框架

    `ChartDemo_histogram`这个文件名可能是一个示例程序或输出文件,展示了如何使用这个框架来绘制直方图,直方图是条形图的一种,用于显示数据分布的情况,每个条形的宽度表示类别区间,高度则表示落入该区间的频数。...

    ScottPlot-Demo-WPF

    - **支持多种图表类型**:包括折线图、散点图、条形图、直方图、饼图、热力图等多种常见图表,满足不同分析需求。 - **实时更新**:支持动态数据更新,可以在图表上实时显示数据变化,非常适合于监控和数据分析应用...

    vb根据文本数据绘图

    1. **Chart控件**:VB.NET提供了`System.Windows.Forms.DataVisualization.Charting`命名空间,其中的`Chart`控件非常适合用于创建直方图。我们需要定义每个区间的边界,然后使用`Series`对象添加数据点。每个`...

    Chartjs曲线图、柱状图、饼状图等多种统计图

    Chart.js是一款轻量级的JavaScript库,专门用于创建各种类型的统计图表,如曲线图、柱状图和饼状图等。它以其简单易用、高效和可定制化的特性深受开发者喜爱,广泛应用于数据可视化项目中。下面将详细介绍Chart.js在...

Global site tag (gtag.js) - Google Analytics