演示:基于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个人主页-哔哩哔哩视频

相关推荐
赵财猫._.2 天前
HarmonyOS内存优化实战:泄漏检测、大对象管理与垃圾回收策略
华为·wpf·harmonyos
赵财猫._.2 天前
鸿蒙超级终端体验:无缝流转的底层实现与用户体验优化
wpf·harmonyos·ux
故事不长丨2 天前
C#委托的使用
c#·wpf·winfrom·委托·网站开发
行走正道2 天前
【探索实战】跨云应用分发自动化实战:基于Kurator的统一交付体系深度解析
运维·自动化·wpf·kurator·跨云分发
Macbethad2 天前
基于WPF的Ethernet/IP主站程序技术方案
网络协议·tcp/ip·wpf
张人玉2 天前
Prism Template Pack 完整使用示例(VS2022 + .NET 8 + DryIoc)
.net·wpf·prism
棉晗榜2 天前
wpf 在XAML中配置视图模型,通过 d:DataContext设置设计时类型,方便按F12跳转查看类型
wpf
赵财猫._.3 天前
HarmonyOS渲染性能优化:组件树复用与局部刷新机制
wpf·harmonyos·ux
赵财猫._.3 天前
鸿蒙分布式数据库同步:冲突解决与数据一致性策略
wpf·harmonyos·ux
Macbethad3 天前
使用WPF编写一个数据记录页面
wpf