当前位置: 首页 > news >正文

基于 SkiaSharp 的 WPF AvaloniaUI 极简动图播放方案

基于 SkiaSharp 的 WPF & AvaloniaUI 极简动图播放方案

🚀 简介

AnimationImage 是一个专为 WPFAvaloniaUI 打造的动图播放方案。基于 SkiaSharp ,性能优秀。

支持播放 Lottie(JSON)GIFWebP 格式,相比现有方案,具有更高的帧率、更佳的渲染性能以及更低的内存占用。

✨ 核心特性

  • 多平台支持:支持 WPF 和 AvaloniaUI(目前未对移动端进行测试)。
  • 多格式兼容:支持 Lottie(.json),GIF、WebP 等格式动图(未来计划支持Apng)。
  • 极致性能:动图利用SKCodec进行流式加载,逐帧解码,极低的内存占用。Lottie则利用Skottie,极致流畅。
  • 动画驱动:使用框架动画库Animation,相比定时器方案,帧率更高更稳定。WPF可以设置更高的帧率,而非默认的60FPS。
  • 极简API:通过附加属性或标记扩展,以原生Image控件作为渲染器。
  • 灵活控制:预加载帧数支持自动计算、手动配置,也可禁用或全量缓存。默认自动播放,可设置循环次数;支持MVVM。

性能表现:
1、lottie动画
wpf-lottie
avalonia-lottie

2、gif-800x600-50fps
wpf-gif-800x600-50fps
avalonia-gif-800x600-50fps

3、gif-1920x1080-30fps,流畅播放,但是进度条拖动不理想
wpf-gif-1920x1080-30fps
avalonia-gif-1920x1080-30fps

📦 安装

通过 NuGet 包管理器安装:

# WPF 版本
Install-Package AnimationImage.WPF# Avalonia 版本
Install-Package AnimationImage.Avalonia

使用方法(参考2个Demo项目)

WPF:xmlns:ani="clr-namespace:AnimationImage.WPF;assembly=AnimationImage.WPF"

<!-- 指定帧率为144,永久循环 -->
<Image ani:AnimationBehavior.AnimatableBitmap="[path]"ani:AnimationBehavior.ForceFPS="144"ani:AnimationBehavior.RepeatBehavior="Forever" /><!-- 全量缓存(gif/webp有效) -->
<Image Source="{ani:AnimatableBitmap '[path]',PreloadCount=PreloadOptions.Full}" /><!-- 设置渲染比例(Lottie有效) -->
<Image Source="{ani:AnimatableBitmap '[path]',RenderScale=0.5}" /><!-- 也可以用到拥有Brush类型属性的控件 -->
<Rectangle Fill="{ani:AnimatableBitmap '[path]'}" /><Border Background="{ani:AnimatableBitmap '[path]'}" /><!-- 取消自动播放 -->
<Image ani:AnimationBehavior.AutoStart="false" …… /><!-- 进度条 -->
<Slider Maximum="{Binding ElementName=img, Path=(ani:AnimationBehavior.AnimatableBitmap).Metadata.Duration}"Value="{Binding ElementName=img, Path=(ani:AnimationBehavior.AnimationTime), Mode=TwoWay}" /><!-- 命令绑定 -->
<StackPanel DataContext="{Binding ElementName=img, Path=(ani:AnimationBehavior.AnimatableBitmap)}"Orientation="Horizontal"><Button Command="{Binding BeginCommand, Mode=OneTime}"Content="Play" /><Button Margin="10,0"Command="{Binding PauseCommand, Mode=OneTime}"Content="Pause" /><Button Command="{Binding StopCommand, Mode=OneTime}"Content="Stop" />
</StackPanel>

Avalonia(用法与WPF基本相同):xmlns:ani="using:AnimationImage.Avalonia"

<!-- 永久循环 -->
<Image ani:AnimationBehavior.AnimatableBitmap="[path]"ani:AnimationBehavior.LoopCount="-1" />
http://www.jsqmd.com/news/892375/

相关文章:

  • 《从 Transformer 矩阵乘法说起:KV Cache 到底是在缓存什么?》
  • 盒须图实战指南:用五数概括做数据诊断与异常识别
  • 异步联邦学习与图神经网络驱动的微服务异常检测实践
  • Realtek r8125 DKMS驱动:Linux 2.5G网卡自动适配终极指南
  • 前沿话题:深度学习、3DGS、语义SLAM与多传感器融合
  • 告别adb shell input!用Python+uiautomator2写Android自动化脚本,效率翻倍
  • LeetCode刷题 day20
  • 26年上半年教育加盟培训机构口碑排行 - 资讯速览
  • GLM-5.1 高速版:400 tokens/s 刷新全球大模型速度上限
  • 专业Windows 11系统优化:使用Win11Debloat实现高效性能与隐私保护
  • 别再手动敲BibTeX了!用Zotero一键搞定IEEE格式参考文献(附期刊/会议/书籍模板)
  • Nmap实战精要:从安装避坑到漏洞测绘的渗透测试工作流
  • 2026最新!降AIGC工具测评:论文降重与改写的好帮手
  • 测试ADS1244对应的ADC的基本特性
  • STL时间序列分解实战:趋势、季节性与噪声的业务化解读
  • 物流行业AI Agent应用:路径优化与库存管理的效率革命
  • 支持4K/60fps长时序生成,原生多模态对齐,Sora 2正式版技术白皮书关键参数逐条拆解,不看必踩交付雷区
  • BilibiliDown终极指南:如何免费下载B站高清视频和音频
  • 2026徐州黄金回收深度指南:品类定价全解析+5家靠谱服务商+避坑实操技巧 - 寻茫精选
  • C# 面向对象:基础概念
  • 告别死记硬背:手把手带你用Pytest+Allure重构蓝桥杯自动化测试项目(从Unittest迁移)
  • 多模态大模型技术深度解析:从 CLIP 到 LLaVA 的视觉语言融合原理
  • 从零搭建Python自动化测试环境:手把手教你为蓝桥杯软件测试赛项配置Firefox+WebDriver
  • 2026年5月遵义地区黄金回收白银铂金回收甄选门店推荐TOP1 地址及联系方式 - 五金回收
  • CTF逆向爆破实战:C++进程级暴力框架设计与优化
  • Modelsim SE-64 2020.4仿真不出波形?别慌,这个优化选项的坑我帮你踩了
  • 9.9 元 AI 班宠爆火:游戏化教育新尝试,能否解决师生痛点?
  • 告别‘文件被占用’:手把手教你用Process Explorer的搜索功能解决删除难题
  • Python期末实战:从基础语法到项目开发的通关指南
  • 告别Steam平台限制:WorkshopDL让你在任何平台都能下载创意工坊模组