感谢WPF的强大封装,这一切竟然3段代码就完成了。
比如我们常见到的那个兔子揉脸的GIF:
程序运行结果:
代码则是使用BitmapDecoder类型,针对GIF动画,则需要初始化它的子类GifBitmapDecoder。而BitmapDecoder得Frames属性则包含一系列的BitmapFrame。这个类型是BitmapDecoder(和BitmapEncoder)中用到的图像帧,继承自BitmapSource,因此本质上也是一种位图类型。
XAML:
<ListBox Name="lbx">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
代码:
var uri = new Uri(@"C:UsersMgenDesktopa.gif");
var gifDecoder = new GifBitmapDecoder(uri, BitmapCreateOptions.None, BitmapCacheOption.Default);
lbx.ItemsSource = gifDecoder.Frames;