C#怎么绘制实时曲线
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了"C#怎么绘制实时曲线",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#怎么绘制实时曲线"吧!1.要做一个调试工具,采集传感器数据并
千家信息网最后更新 2025年11月07日C#怎么绘制实时曲线
这篇文章主要讲解了"C#怎么绘制实时曲线",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#怎么绘制实时曲线"吧!
1.要做一个调试工具,采集传感器数据并显示。绘制曲线注意坐标反转,线条的张力即可。项目中的曲线是从右往左显示的,线条的坐标都放在list里了,效果如下图:
2.上代码
public class DrawingCurve { private Graphics graphics; //Graphics 类提供将对象绘制到显示设备的方法 private Bitmap bitmap; //位图对象 private int timeLine = 60;//60s private int canvasWidth = 600;//画布长度 private int sliceCount = 0;//刻度分段个数 = timeLine private int xSlice = 10;//X轴刻度分端宽度 private int xSliceHeight = 10;//X轴刻度高度 private float tension = 0.5f; //张力系数 private bool showX = true; private bool showY = true; private bool showZ = true; //Queue que = new Queue();//曲线fifo /// /// 构造函数 /// public DrawingCurve() { this.xSlice = this.canvasWidth / timeLine; } /// /// 绘制画布 /// /// /// /// /// public Bitmap DrawCanvas(int width, int height,List points) { if (bitmap != null) { bitmap.Dispose(); bitmap = null; } bitmap = new Bitmap(width, height); graphics = Graphics.FromImage(bitmap); graphics.FillRectangle(Brushes.Black, new Rectangle(0, 0, width, height)); graphics.Transform = new Matrix(1, 0, 0, -1, 0, 0);//Y轴向上为正,X向右为 graphics.TranslateTransform(0, height / 2, MatrixOrder.Append); Pen pen = new Pen(Color.Red, 1); pen.DashStyle = DashStyle.Custom; pen.DashPattern = new float[] { 2, 2 }; graphics.DrawLine(pen, new Point(0, height / 4), new Point(width, height / 4)); graphics.DrawLine(pen, new Point(0, height / -4), new Point(width, height / -4)); graphics.DrawLine(new Pen(Color.GreenYellow,1), new Point(0, 0), new Point(width, 0)); graphics.DrawString("0", new Font("Vendara",10), Brushes.White, new Point(0, -15)); graphics.DrawString("+", new Font("Vendara", 10), Brushes.White, new Point(0, height / 4)); graphics.DrawString("-", new Font("Vendara", 10), Brushes.White, new Point(0, height / -4-15)); graphics.Transform = new Matrix(1, 0, 0, 1, 0, 0);//Y轴向上为正,X向右为 graphics.TranslateTransform(0, height / 2, MatrixOrder.Append); graphics.DrawString("-59s", new Font("Vendara", 8), Brushes.White, new Point(0, height/2-15)); graphics.DrawString("0s", new Font("Vendara", 8), Brushes.White, new Point(width-20, height / 2 - 15)); for (int i = 0; i < timeLine; i++) { int scale = i * xSlice; graphics.DrawLine(new Pen(new SolidBrush(Color.Blue)), 0 + scale, 0 + xSliceHeight * 0.1f, 0 + scale, 0 - xSliceHeight * 0.1f); } graphics.Transform = new Matrix(-1, 0, 0, -1, 0, 0);//Y轴向上为正,X向右为 graphics.TranslateTransform(width, height / 2, MatrixOrder.Append); if (showX) DrawX(graphics, points); if (showY) DrawY(graphics, points); if (showZ) DrawZ(graphics, points); graphics.Dispose(); return bitmap; } #region 绘制曲线 private void DrawX(Graphics graphics, List points) { Pen CurvePen = new Pen(Color.Cyan, 2); PointF[] CurvePointF = new PointF[points.Count]; float keys = 0; float values = 0; for (int i = 0; i < points.Count; i++) { keys = xSlice * i; values = 10 * (points[i] / 10); CurvePointF[i] = new PointF(keys, values); } graphics.DrawCurve(CurvePen, CurvePointF, this.tension); } private void DrawY(Graphics graphics, List points) { Pen CurvePen = new Pen(Color.Purple, 2); PointF[] CurvePointF = new PointF[points.Count]; float keys = 0; float values = 0; for (int i = 0; i < points.Count; i++) { keys = xSlice * i; values = 10 * (points[i] / 10); CurvePointF[i] = new PointF(keys, values); } graphics.DrawCurve(CurvePen, CurvePointF, this.tension); } private void DrawZ(Graphics graphics, List points) { Pen CurvePen = new Pen(Color.OrangeRed, 2); PointF[] CurvePointF = new PointF[points.Count]; float keys = 0; float values = 0; for (int i = 0; i < points.Count; i++) { keys = xSlice * i; values = 10 * (points[i] / 10); CurvePointF[i] = new PointF(keys, values); } graphics.DrawCurve(CurvePen, CurvePointF, this.tension); } /// /// 曲线开关 /// /// /// public void HideCurve(string _xyz,bool show) { switch (_xyz) { case "x": showX = show; break; case "y": showY = show; break; case "z": showZ = show; break; default: break; } } #endregion } 3.UI上使用ThreadStart进行调用,根据需要设置休眠时间即可,同时设置pictureBox显示即可。
感谢各位的阅读,以上就是"C#怎么绘制实时曲线"的内容了,经过本文的学习后,相信大家对C#怎么绘制实时曲线这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
曲线
实时
C#
刻度
学习
内容
坐标
对象
张力
画布
线条
上代
个数
传感器
位图
函数
同时
宽度
就是
工具
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南关区资质网络安全服务保障
部队微课网络安全
谷歌生产服务器
学校网络安全泄露追究制度
服务器存储软件
阿拉德之怒深渊一区是哪个服务器
java数据库连接池异常
vb2010数据库
浅谈网络安全威胁
服务器出厂前需要安装系统吗
浪潮服务器蓝屏
沈阳服务器安全
全国人大通过的网络安全法于
金融服务器租用
lol服务器会弹出安全警报
企业网络安全 毕业论文
象山手机软件开发公司报价
网络安全演讲稿报幕词
数据库该怎么形容
文明与征服怎么开服务器
读取postgis数据库
湖南跨境网络安全
泰生吉利网络技术工作室
常州网络营销软件开发销售价格
尚学堂数据库查询网
网络技术应用题库答案
数据库多少字段
肿瘤组织蛋白表达差异数据库
浙江项目软件开发定制费用
网络安全委员会第一次会议