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

相关推荐
hqwest20 小时前
C#WPF实战出真汁07--【系统设置】--菜品类型设置
开发语言·c#·wpf·grid设计·stackpanel布局
hqwest1 天前
C#WPF实战出真汁08--【消费开单】--餐桌面板展示
c#·wpf·ui设计·wpf界面设计
orangapple1 天前
WPF 打印报告图片大小的自适应(含完整示例与详解)
c#·wpf
三千道应用题2 天前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf
✎ ﹏梦醒͜ღ҉繁华落℘3 天前
开发WPF项目时遇到的问题总结
wpf
hqwest4 天前
C#WPF实战出真汁06--【系统设置】--餐桌类型设置
c#·.net·wpf·布局·分页·命令·viewmodel
Vae_Mars4 天前
WPF中使用InputBindings进行快捷键绑定
wpf
hqwest4 天前
C#WPF实战出真汁05--左侧导航
开发语言·c#·wpf·主界面·窗体设计·视图viewmodel
hqwest4 天前
C#WPF实战出真汁01--项目介绍
开发语言·c#·wpf
wuty0075 天前
WPF 实现支持动态调整高度的文本显示控件
wpf·scrollviewer·extentheight·自动高度控件·动态调整高度