在WPF项目开发中遇到要显示apng格式的动态图片问题,gif有第三方控件显示,但是apng显示比较麻烦,在网上看到两种方式:
-
使用Image控件,通过后台代码定时显示每一帧图片
-
使用WebView控件(该控件本来是用于显示网页的),将apng格式图片发布成网络图片,然后将图片地址赋给控件
这两种缺点:第一种前后台线程有交互,后台代码线程容易出现卡死效率不高 第二种需要引用额外的网页显示控件,并且发布网络图片比较麻烦
因此想利用wpf本身的动画特性实现apng,gif等格式动图展示,想法是将动态图片apng、gif等格式图片使用动图分解工具Apng格式动图分解工具或者 gif格式分解工具(也可以自己写代码拆分)将动图拆分成一帧一帧图片,然后每一帧都显示在单个Image控件上重叠在Grid控件,然后使用wpf关键帧动画控制每一帧Image控件的显示,实际使用的时候加载拆分图片的过程只加载一次就行。这样就可以加载展示任意格式动图了
前台代码:
<Window x:Class="WpfApp2.MainWindow4"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title="MainWindow4" Height="500" Width="800">
<Grid Width="204" Height="272" x:Name="DynamicImages">
</Grid>
</Window>
后台代码:
public partial class MainWindow4 : Window
{
public MainWindow4()
{
InitializeComponent();
DynamicImagesAnimation dynamicImagesAnimation =
new

本文介绍了在WPF项目中如何解决显示apng动态图片的问题。传统方法如使用Image控件或WebView控件存在效率和依赖问题。作者提出了一种新的思路,利用WPF的动画特性,将apng、gif等动态图片分解为帧图片,通过关键帧动画控制Image控件显示每一帧,从而实现动态效果。这种方法避免了前后台交互导致的线程卡死和额外控件引用的复杂性。

767

被折叠的 条评论
为什么被折叠?



