首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
热门关键字: .net应用  操作系统  Dreamweaver  WinRAR  网络推广
高级搜索
您当前的位置: 主页>NET专区>C#语言>C#语言绘制实时曲线图代码实例
C#语言绘制实时曲线图代码实例
来源: 发布时间:2008-07-21 发布人: 浏览: 人次   字体: [ ]  
本文将讲述利用C#语言绘制一个实时曲线图,可用来显示CPU的使用频率以及播放声音视频时实时显示当前的声频等等!

为了操作和应付变化,所以将绘制曲线图的功能单独封装成一个类,里面的数据完全是模拟的,在横向坐标上每个像素间隔用一个点来控制(实际中可能会加大这个距离),横向是个随机生成的数(实际开发中这应该来自我们的实时数据按比率计算得来的),显示窗体中用到了一个线程来定时绘制实时曲线。

实际代码如下:

  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. using System.Drawing;   
  5. using System.Drawing.Imaging;   
  6.   
  7. namespace RealtimeCurve   
  8. {   
  9.     /// <SUMMARY>   
  10.     /// 说明:实时图片生成类,在本例中横向坐标上每个像素都会有一个控制点   
  11.     /// 实际开发中可以减少控制点,比如每5个像素用一个控制点   
  12.     /// 这样的效果或许更加逼真   
  13.     /// </SUMMARY>   
  14.     public class RealTimeImageMaker   
  15.     {   
  16.         private int width;//要生成的曲线图的宽度   
  17.         private int height;//要生成的曲线图的高度   
  18.         private Point[] pointList;//用来绘制曲线图的关键点,依次将这些点连接起来即得到曲线图   
  19.         private Random random = new Random();//用于生成随机数   
  20.         private Bitmap currentImage;//当前要绘制的图片   
  21.         private Color backColor;//图片背景色   
  22.         private Color foreColor;//图片前景色   
  23.         /// <SUMMARY>   
  24.         /// 图片的高度   
  25.         /// </SUMMARY>   
  26.         public int Height   
  27.         {   
  28.             get { return height; }   
  29.             set { height = value; }   
  30.         }   
  31.        
  32.         /// <SUMMARY>   
  33.         /// 图片的宽度   
  34.         /// </SUMMARY>   
  35.         public int Width   
  36.         {   
  37.             get { return width; }   
  38.             set { width = value; }   
  39.         }   
  40.         /// <SUMMARY>   
  41.         /// 构造函数,指定生成的曲线图的宽度和高度   
  42.         /// </SUMMARY>   
  43.         /// <PARAM name="width">要生成的曲线图的宽度</PARAM>   
  44.         /// <PARAM name="height">要生成的曲线图的高度</PARAM>   
  45.         public RealTimeImageMaker(int width, int height):this(width,height,Color.Gray,Color.Blue)   
  46.         {   
  47.                
  48.         }   
  49.         /// <SUMMARY>   
  50.         /// 构造函数,指定生成的曲线图的宽度、高度及背景色和前景色   
  51.         /// </SUMMARY>   
  52.         /// <PARAM name="width">要生成的曲线图的宽度</PARAM>   
  53.         /// <PARAM name="height">要生成的曲线图的高度</PARAM>   
  54.         /// <PARAM name="backColor">曲线图背景色</PARAM>   
  55.         /// <PARAM name="foreColor">曲线图前景色</PARAM>   
  56.         public RealTimeImageMaker(int width, int height, Color backColor, Color foreColor)   
  57.         {   
  58.             this.width = width;   
  59.             this.height = height;   
  60.             this.backColor = backColor;   
  61.             this.foreColor = foreColor;   
  62.             pointList = new Point[width];   
  63.             Point tempPoint;   
  64.             //初始化曲线上的所有点坐标   
  65.             for (int i = 0; i < width; i++)   
  66.             {   
  67.   
  68.                 tempPoint = new Point();   
  69.                 //曲线的横坐标沿x轴依次递增,在横向位置上每个像素都有一个点   
  70.                 tempPoint.X = i;   
  71.                 //曲线上每个点的纵坐标随机生成,但保证在显示区域之内   
  72.                 tempPoint.Y = random.Next() % height;   
  73.                 pointList[i] = tempPoint;   
  74.             }   
  75.         }   
  76.         /// <SUMMARY>   
  77.         /// 获取当前依次连接曲线上每个点绘制成的曲线   
  78.         /// </SUMMARY>   
  79.         /// <RETURNS></RETURNS>   
  80.         public Image GetCurrentCurve()   
  81.         {   
  82.             //currentImage = historyImage.Clone(new Rectangle(1, 0, width - 1, height), PixelFormat.Format24bppRgb);   
  83.             currentImage = new Bitmap(width, height);   
  84.             Point p;   
  85.             //将当前定位曲线图的坐标点前移,并且将横坐标减1,   
  86.             //这样做的效果相当于移除当前第一个点   
  87.             for (int i = 0; i < width-1; i++)   
  88.             {   
  89.                 p = pointList[i + 1];   
  90.                 pointList[i] = new Point(p.X-1,p.Y);   
  91.             }   
  92.             Point tempPoint = new Point();   
  93.             //新生成曲线图定位点的最后一个点的坐标   
  94.             tempPoint.X = width;   
  95.             //曲线上每个点的纵坐标随机生成,但保证在显示区域之内   
  96.             tempPoint.Y = random.Next(DateTime.Now.Millisecond) % height;   
  97.             //在最后再添加一个新坐标点   
  98.             pointList[width-1]=tempPoint;   
  99.             Graphics g = Graphics.FromImage(currentImage);   
  100.             g.Clear(backColor);   
  101.             //绘制曲线图   
  102.             g.DrawLines(new Pen(foreColor), pointList);   
  103.             g.Dispose();   
  104.             return currentImage;   
  105.         }   
  106.     }   
  107. }  

    共2页: 上一页 1 [2] 下一页
↓下一篇:没有了
相 关 文 章   发布商链接
·C#向Excel报表中插入图片的2种方法
·提供一个基于.NET的加密/解密算法
·在.NET中产生随机密码字符串
·用C#实现查询IP所在区段的功能
·实例解释C#中Dispose和Close的区别
·C#区别和认识四个判等函数
·c#中的ArrayList属性祥解及其语法...
·C#中关于四舍五入函数的讨论及其解...
·使用C#编写查询IP段功能的程序
·关于C#在lucene.net下的中文切词
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·C#泛型学习笔记总结
·c#语言从dbf数据库提取数据并
·C#编写控制线程的运行和线程...
·怎样在C#中删除只读文件及其...
·C#函数中返回多个值的两种方...
·如何在C#中插入照片到Excel文
·如何在c#中获取事件注册的方...
·C#对timer类的使用操作代码
·什么是泛型?泛型的一些概述
·C#如何从文本文件读取信息并...
·如何在c#中去掉字符串中的回...
·如何使用C#获取IIS服务器版本...
·什么是泛型编程思想?及其简...
·c#子线程控制进度条的一个简...
·C#如何获取文件路径中的文件...
热 门 文 章
·c#中收发邮件处理代码(POP3,...
·C#中关于四舍五入函数的讨论...
·C#如何获取文件路径中的文件...
·c#中的ArrayList属性祥解及其...
·快速进行List排序的通用方法...
·String.Split 方法使用及其代...
·什么是c#深拷贝与浅拷贝及其...
·如何在c#中去掉字符串中的回...
·asp.net打造进度条窗口代码,...
·用C#操作类读写WinCE平台Mac...
·初学者参考C#中操作XML修改完...
·谈谈对C#委托的理解,附代码实...
·用C#编写ActiveX控件代码实例
·c#访问修饰符介绍及其应用实...
·浅谈C#对象深拷贝、浅铐贝、...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .