演示:基于WPF的DrawingVisual开发的高刷新率示波器

一、目的:分享一个基于WPF的DrawingVisual开发的高刷新率示波器


二、效果演示

特此说明:由于Gif录制工具帧率不够,渲染60帧用了4.6秒,平均帧率在12Hz左右,所以展示效果不好,想要看好些的效果可以看文章下面的B站视频作为参考

        但B站的录制工具也是在25帧/秒这样,而电脑默认满帧60Hz,应用程序也可以渲染到50-60帧/秒,所以实际应用程序效果要好于视频效果 

        如下示例中,FPS部分就是展示实际渲染的帧率基本可以保持在50-60Hz之间(60Hz是本电脑设置的默认最高帧率) 


随机数据(2000条数据)

正弦曲线(2000条数据)

 自定义波形(2000条数据)

 脉冲波形(2000条数据)

方波波形 (2000条数据)

三、环境

VS2022,Net7,Win10,NVIDIA RTX A2000

四、主要功能

支持多种波形数据源作为测试数据

支持多种渲染模式(主要分为矢量和位图)

支持设置起始频率,终止频率,中心频率,频率宽度,最小功率和最大功率设置

支持ToolTip鼠标悬停显示频谱信息

支持暂停/播放操作

平移,缩放,适配等操作

支持显示Fps(刷新率) 

 

五、性能和实现 

具体实现和数据如下参考文章

演示:基于WPF的DrawingVisual开发的频谱图和律动图_差值均分-CSDN博客

另外对于密集的点可以使用低分辨率的位图进行渲染来提升帧率,总之,制作高刷新的示波图可以从如下方面优化:

1、降低数据点数量;

2、提高硬件尤其是GPU配置;

3、采用高性能的绘图方式;

4、读写分离、渲染线程和更新数据线程分离;

5、动静分离、静态坐标轴、网格等数据和动态曲线数据分层渲染;

6、重复的数据应该应用缓存,避免重复创建;

7、可以冻结的资源应用冻结提升性能;

8、虚拟化截取掉不需要渲染的区域;

9、尽量缩小显示的范围,越小刷新效果越好;

10、注意细节,比如尽量减少使用虚线,实际中过多的虚线会大大消耗渲染性能;

        总之影响性能的因素很多,而可能任意一种都会使渲染效果不理想,所以要注意细节,逐一隔离各种影响性能的因素去调试哪些影响到绘制性能,其他待补充...

六、演示视频 

【WPF-Spectrum】高刷新率示波器_哔哩哔哩_bilibili

注:录制视频工具实际是25帧/秒,而实际渲染速度大概在50-60 帧/秒

需要了解的知识点 

DrawingContext Class (System.Windows.Media) | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

控件库 - WPF .NET Framework | Microsoft Learn

WPF 介绍 | Microsoft Learn

XAML概述 - WPF .NET | Microsoft Learn

Windows Presentation Foundation 简介 - WPF .NET | Microsoft Learn

使用 Visual Studio 创建新应用教程 - WPF .NET | Microsoft Learn

了解更多

适用于 .NET 8 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

适用于 .NET 7 的 WPF 的新增功能 - WPF .NET | Microsoft Learn

System.Windows.Controls 命名空间 | Microsoft Learn

Reference Source

Sysinternals - Sysinternals | Microsoft Learn

Windows app development documentation - Windows apps | Microsoft Learn

欢迎使用 Expression Blend | Microsoft Learn

https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/?view=netdesktop-7.0&WT.mc_id=MVP_380318

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/454327.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【目标检测2024】DetCLIP

算法介绍 CLIP(Contrastive Language-Image Pre-Training)模型是一种多模态预训练神经网络,由OpenAI在2021年发布,是从自然语言监督中学习的一种有效且可扩展的方法。CLIP在预训练期间学习执行广泛的任务,包括OCR&…

DORA 机器人中间件学习教程(6)——激光点云预处理

文章目录 1 移植思路2 代码输入输出说明3 编写CmakeList.txt文件4 编写yml文件5 编译并启动节点参考资料 在DORA中通过驱动获取激光雷达数据后,激光点云预处理部分代码是参考了autoware官方代码并对其进行裁剪得到的,点云预处理主要包含三个节点&#xf…

32.第二阶段x86游戏实战2-遍历技能2(技能二叉树基址)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要…

[数据集][目标检测]电力场景输电线路巡检检测数据集VOC+YOLO格式8667张50类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8667 标注数量(xml文件个数):8667 标注数量(txt文件个数):8667 标注…

双碳目标下储能产业新趋势与架构

0.引言 储能技术涉及能量的存储和利用,对电力系统平衡至关重要。它允许电力在需求时被储存和释放,对电力生产和消费方式产生重大影响。随着全球应对气候变化,风能和太阳能成为主要能源,但其不稳定性需要储能技术来提高可靠性。储…

在做题中学习(65):Z字形变换

6. Z 字形变换 - 力扣(LeetCode) 解法:模拟 思路:把原字符串从上到下依次读取到新字符串中,就需要看看Z字形变换时字符变化的规律。 以行数h4时为例: 对于第一行和最后一行: 每一个字符的下标…

Java笔试06

在Java中,异常可以分为两大类:编译时异常(编译时检查异常)和运行时异常(非编译时检查异常)。 编译时异常(Checked Exceptions)是指在编译时期必须被捕获或声明抛出的异常。这些异常…

基于springboot家乡特色推荐系统

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的,前后端分离。 开发语言:Java数据库:MySQL技术:…

Q宠大乐斗批量好友添加器(基于python实现)

效果如下: 只要有自动化测试的浏览器和插件就能批量添加等级相近的陌生人为好友,过程迅速,分两个py文件 第一个是主程序: import tkinter as tk import re from tkinter import scrolledtext, font, ttk, messagebox, filedialog from selenium import webdriver from se…

10_实现readonly

在某些时候,我们希望定义一些数据是只读的,不允许被修改,从而实现对数据的保护,即为 readonly 只读本质上也是对数据对象的代理,我们同样可以基于之前实现的 createReactiveObject 函数来实现,可以为此函数…

Unable to open nested entry ‘********.jar‘ 问题解决

今天把现网版本的task的jar拖回来然后用7-zip打开拖了一个jar进去替换mysql-connector-java-5.1.47.jar 为 mysql-connector-java-5.1.27.jar 启动微服务的时候就报错下面的 Exception in thread "main" java.lang.IllegalStateException: Failed to get nested ar…

OS管理和进程的学习

1.冯诺依曼体系结构 1.1 输入设备:键盘,鼠标,键盘,网卡(网络接受),磁盘... 输出设备:显示器,磁盘,网卡(网络发送) .... 存储器&…

CTFHUB技能树之SQL——字符型注入

开启靶场,打开链接: 直接指明是SQL字符型注入,但还是来判断一下 (1)检查是否存在注入点 1 and 11# 返回正确 1 and 12# 返回错误 说明存在SQL字符型注入 (2)猜字段数 1 order by 2# 1 order…

Shell重定向输入输出

我的后端学习大纲 我的Linux学习大纲 重定向介绍 标准输入介绍 从键盘读取用户输入的数据,然后再把数据拿到Shell程序中使用; 标准输出介绍 Shell程序产生的数据,这些数据一般都是呈现到显示器上供用户浏览查看; 默认输入输出文件 每个…

QT的文件操作类 QFile

QFile 是 Qt 框架中用于文件处理的一个类。它提供了读取和写入文件的功能,支持文本和二进制文 件。 QFile 继承自 QIODevice ,因此它可以像其他IO设备一样使用。 主要功能 文件读写: QFile 支持打开文件进行读取或写入操作文件信息&#x…

neutron组件

1.实现虚拟交换机有两种方式 2.HCS网络节点 华为 HCS 将网络节点单独部署,且部署两台(主备部署) 两张万兆网卡,否则检测无法通过 L3 agent 部署在哪个节点,哪个节点就是网络节点 DHCP agent metadata agent 3.neutron概念 3.1Neutron支持…

人工智能 | 阿里通义千问大模型

简介 通义千问系列模型为阿里云研发的大语言模型。千问模型基于 Transformer 架构,在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在预训练模型的基础之上&…

整理一下实际开发和工作中Git工具的使用 (持续更新中)

介绍一下Git 在实际开发和工作中,Git工具的使用可以说是至关重要的,它不仅提高了团队协作的效率,还帮助开发者有效地管理代码版本。以下是对Git工具使用的扩展描述: 版本控制:Git能够跟踪代码的每一个修改记录&#x…

YOLO目标检测

文章目录 一、含义二、与传统检测对比1.one-stage的优缺点2.two-stage的优缺点 三、MAP指标1.基本概念2.计算方法3.指标意义 一、含义 YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,由Joseph Redmon等人于2016年提出。它的核心…

力扣 困难 52.N皇后II

文章目录 题目介绍题解 题目介绍 题解 法一:返回51题N皇后List的长度 法二: class Solution {private int n, ans;private boolean[] onPath, diag1, diag2;public int totalNQueens(int n) {this.n n;onPath new boolean[n];diag1 new boolean[n * …