话说前几天我一个朋友跟我谈到一个特别的需求,想从Web上下载GIF图片过来然后在Windows phone 上显示。我们都知道Silverlight与Windows Phone都是不支持GIF图像格式的。如果你尝试去下载gif图片然后在Image控件上显示,你将会得到一个异常。
所以我在网络上找到了 ImageTools 库,这是个包含多种图像格式转换器的第三方库,其中就支持针对GIF格式的图像转换。
使用方式:
首先为你的项目添加此库的引用,如下图,我们使用NuGet来获取ImageTools
为了达成我们的目标,这里需要两个部件:
1,AnimatedImage,它将替换掉标准的 Silverlight ImageControl。
2,ImageConverter,完成图片格式的转换。
这两个对象都是 ImageTools.Controls 命名空间下的,所以在XAML中也要申明命名空间
<phone:PhoneApplicationPage.Resources><imagetools:ImageConverter x:Key="ImageConverter" />
</phone:PhoneApplicationPage.Resources>
一旦已经引入了命名空间,那么就能将 converter 作为页面资源添加进来,如下代码所示
代码
当然如果希望这个converter能够在整个项目都能使用,那么你可以在 App.xaml 文件的 Application.Resources 节点添加此元素。
好了,现在可以在页面添加AnimatedImage控件了,这里可以将控件的 Source 属性绑定为 Uri 对象,然后设置好 Image Converter 的引用。如下:
<StackPanel>
<imagetools:AnimatedImage x:Name="Image" Source="{Binding Path=ImageSource, Converter={StaticResource ImageConverter}}" />
</StackPanel>
然后将 ImageSource 属性在后台C#代码中进行如下设定。
ImageSource = new Uri("http://www.nonstopgifs.com/animated-gifs/games/games-animated-gif-002.gif", UriKind.Absolute);
最后我们在页面的构造方法中添加这样一行代码来支持GIF解码的功能。
public MainPage()
{
InitializeComponent();
ImageTools.IO.Decoders.AddDecoder<GifDecoder>();
}
好了,编译一遍然后运行,你肯定能看到运动起来的GIF图片。
原文链接 , OSChina.NET 原创翻译