前段时间调试芯片,需要画直方图,因为我的框架是基于MFC的,时间又紧迫,当时要求我速度搞,所以饥不择食的寻遍网上的各种轮子。
首先是我们知道如果有数据的话可以直接在excel上面利用它强大的特性来画图,微软的office其实提供了这些画图的sdk接口,只要你加载进去就可以,但是太麻烦,而且网上的例子比较少,需要一定的时间去摸索,但是是否有其他开源的框架也能画出美丽的图表呢?
我们都知道如果是qt的话,它的QCustomPlot比较好用,其实我就画过,但是我嫌弃qt用MFC又搞了一个。我找到的第一个MFC控件是TeeChart,这个控件在Debug下面是可以运行跑出来的,但是由于不是正版,而且很多坑,在Release模式下是编译不通过,我基本试遍所有版本。而且我的数据是一个动态流,对刷新帧率这个有一定的要求,所以说TeeChart各种原因导致我放弃了这个控件,但是如果有人需要静态图以及允许在debug下面使用的话,我会建议用这个控件。
然后我又找了另外一个轮子就是High-speed Charting Control,这个轮子是比较适合大家使用的。因为它的代码是开源的,而且bug极少,测了一下效果也不错。
链接:https://pan.baidu.com/s/1o5QR9GRMx5aDreesMYh0Cg
提取码:00r1
只需要下载完这部分源代码,然后加载你项目路径下,按需要去调用即可。以下是这个控件的代码分布
这是我在代码里初始化控件
由于我只用到直方图部分,所以按照这个去设点,把点统计出来按照接口设置即可,如果有用到的可以试试。
出来后效果
控件的主要特点是:
- 高速绘图(轴固定时),允许快速绘制数据
- 无限数量的数据序列(内存是限制)
- 每个数据序列的数据量不受限制
- 支持线图,点图,平面图,柱状图,K线图 和甘特图系列
- 最多四个轴(左,下,右和上轴)
- 标准轴,对数轴或日期/时间轴
- 自动伸缩的坐标轴, 翻转的坐标轴(相互独立)
- 轴标签
- 点标签
- 平滑的曲线
- 网格
- 图例和标题
- 交互性(在控件中发生特定事件时的通知)
- 支持手动缩放和鼠标平移
- 支持鼠标指针
- 支持轴上的滚动条
- 高度可定制(颜色,标题,标签,边缘,字体等)
- 支持UNICODE
- 支持打印和保存到图像文件
这个基本满足了大家对于图表的需求,而且我觉得对比excel也比较美观的。由于MFC如果手动去描绘的话,这个过程可能不太顺畅,因为要耗费一定的时间,所以我们会建议你优先使用别人的开源框架,别人已经踩过坑造出的轮子是最优的。
当然,我在芯片的视觉处理中使用了大量的opencv,opencv的强大,画一个折线图都不在画下,但是相比较而言,opencv只能给出一个比较静态的图,如果你要缩放扩大,或者颜色渲染,图文修改都会比较麻烦。
总的来说,最优的方案还是建议用qt来画图吧,MFC比较麻烦,它的难度会比QT高,QT在工业领域上的占比很高。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.