动态按比例绘制波形的思路以及按关系缩放公式
来源:互联网 发布:html5权威指南 源码 编辑:程序博客网 时间:2024/05/17 03:03
在动态绘制中一开始出现的问题,主要是没有做到一个点一个点的绘制,是一段一段的绘制的所以移动的时候给人一种一卡一卡的感觉,这个问题一开始显示数据的时候都没有发现这个问题不对,后来时间长了才发现为什么绘制那么规整,数据的波动没有体现出来,查看代码发现,这个一段一段的绘制不对,应该每加入一个点就应该按比例缩放一下
这里先给出一个比例缩放公式,本人感觉很好用,可以有效的将数据比例关系缩放到要显示的最大范围之内
缩放后值=(当前值-这组数据最小值)/(这组数据最大值-这组数据最小值)* 数据范围;
这个公式可以有效的解决数据太大或者太小的问题。
接下来介绍大体流程:
线程接受到数据后,显示计时器开始执行,显示计数器中主要执行的操作就是一点一点的拿数据按比例缩放,然后放到一个容器中然后 通过MoveToEx和LineTo绘制点,当然还要注意到将图片显示时要使用双缓存机制来绘制图片,要不会出现闪烁现象,这里贴出部分绘制代码
HDC hDC = pDC->GetSafeHdc();::GetClientRect(hWnd, rect);/****创建第二缓存区****/ CDC dcMen;CBitmap bmp;dcMen.CreateCompatibleDC(pDC); // 创建依附窗口bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); // 创建兼容位图dcMen.SelectObject(&bmp); // 将位图选入内存dcMen.FillSolidRect(rect, pDC->GetBkColor()); // 使得新创建的缓存区的背景和原背景一致HDC hDCMen = dcMen.GetSafeHdc();// 绘制坐标轴if ( iCoorAxisNumber == 0 ) return false;int iCoorHeight = (rect.Height() - (25 * iCoorAxisNumber)) / iCoorAxisNumber;int iCoorWidth = rect.Width() - 40;for ( int i = 0; i < iCoorAxisNumber; i++ ){ CoorSystemDemo coorsystem; coorsystem.DrawCoor(hDCMen, rect.left + 20, rect.top + (20 + iCoorHeight) * (i + 1), iCoorWidth, iCoorHeight); coorsystem.DrawXAxisScale(hDCMen); coorsystem.DrawYAxisScale(hDCMen);}// 绘制曲线// 设置绘制曲线的画笔m_hOldPen = dcMen.SelectObject(&m_hNewPen);if ( ShowData ){ if ( !m_vectRawDataArray.size() ) return false; if ( !m_vectRawDataArray.at(0).m_deqEEGData.size() ) return false; for ( size_t i = 0; i < m_vectRawDataArray.size(); i++) { int iXStart = 20, iYStart; int iXEnd, iYEnd; for ( int j = 1; j < m_vectRawDataArray.at(i).m_deqEEGData.size(); j++ ) { iYStart = m_vectRawDataArray.at(i).m_deqEEGData.at(j - 1); iXEnd = iXStart + 1; iYEnd = m_vectRawDataArray.at(i).m_deqEEGData.at(j); MoveToEx(hDCMen, iXStart, iYStart, NULL); LineTo(hDCMen, iXEnd, iYEnd); iXStart = iXEnd; } m_vectRawDataArray.at(i).m_deqEEGData.clear(); }}// 贴图到到界面中pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &dcMen , 0, 0, SRCCOPY);// 释放资源::DeleteDC(dcMen);::DeleteObject(bmp);::ReleaseDC(hWnd, hDCMen);m_vectRawDataArray.clear();
这里没有比例缩放和动态移动部分,会在后面添加,这个代码还在修改中,估计下周动态显示可以出现完整的。
阅读全文
0 0
- 动态按比例绘制波形的思路以及按关系缩放公式
- PCM音频波形的绘制以及注意事项
- 图片的按比例缩放
- GDI波形图的绘制以及坐标系的添加
- 有关在对话框中绘制动态波形的改进
- 按比例缩放图片的代码
- iOS UILabel根据字数自适应宽高以及控件按屏幕大小按比例缩放
- as3种常见的弹性效果公式以及波形运动等as3动画效果公式代码整理
- 按比例缩放图片的js代码
- java swing的背景图片按比例缩放
- 按比例缩放分辨率大的图片
- 按比例自动缩放图片的大小
- java swing的背景图片按比例缩放
- 按比例缩放的geoserver组合样式编写
- Latex公式的缩放
- 终于找到绘制波形的方法了
- 利用MFC绘制Excel数据的波形
- WinForm下波形图的绘制
- mysql api编程(三) 事务
- js排序算法
- swagger ui应用
- mac下solr6.5的安装与配置
- Elasticsearch5.3 用JAVA创建索引
- 动态按比例绘制波形的思路以及按关系缩放公式
- 科大讯飞人脸识别,语音听写,声纹识别踩坑记
- 软键盘
- AlertDialog字体大小设置 确认取消按钮字体大小设置
- 移植OPENCORES上的I2C MASTER到AXI接口处理器层面实现驱动 之一
- 本地对象之String
- hud上的动态规划练习
- Spring Cloud中,Feign常见问题总结
- HTML-布局