【发布时间】:2011-05-08 08:14:44
【问题描述】:
我想在我的 WP7 应用程序中显示 gif。 有什么方法可以实现吗?
我已经尝试过这个http://imagetools.codeplex.com/,但无法使其与 WP7 一起使用。
提前感谢您的帮助
【问题讨论】:
标签: silverlight windows-phone-7 gif
我想在我的 WP7 应用程序中显示 gif。 有什么方法可以实现吗?
我已经尝试过这个http://imagetools.codeplex.com/,但无法使其与 WP7 一起使用。
提前感谢您的帮助
【问题讨论】:
标签: silverlight windows-phone-7 gif
事实上, 它工作正常,但缺少一些文档。
经过一些麻烦,这里是如何使用它:
在 xaml 中添加命名空间:
xmlns:imagetools="clr-namespace:ImageTools.Controls;assembly=ImageTools.Controls"
还有资源:
<phone:PhoneApplicationPage.Resources>
<imagetools:ImageConverter x:Key="ImageConverter" />
</phone:PhoneApplicationPage.Resources>
然后将控制器与转换器一起使用:
<imagetools:AnimatedImage Source="{Binding ImageSource, Converter={StaticResource ImageConverter}}" />
你的 ImageSource 应该是一个 Uri,例如:
ImageSource = new Uri("http://mysite/my.gif", UriKind.Absolute);
不要忘记添加解码:
ImageTools.IO.Decoders.AddDecoder<GifDecoder>();
【讨论】:
在此处查看 Jamie Rodriguez 关于在 WP7 中使用 GIF 的帖子。他使用 CodePlex 的 ImageTools 项目。
http://blogs.msdn.com/b/jaimer/archive/2010/11/23/working-with-gif-images-in-windows-phone.aspx
【讨论】:
我努力让接受的答案起作用。以下解决方案对我来说可以显示静态 gif。
public ImageResponse(string imageUrl)
{
InitializeComponent();
ImageTools.IO.Decoders.AddDecoder<GifDecoder>();
var imageResponse = new ExtendedImage();
imageResponse.UriSource = new Uri(imageUrl);
imageResponse.LoadingCompleted += this.ImageResponseLoadingCompleted;
}
private void ImageResponseLoadingCompleted(object sender, EventArgs e)
{
var imageResponse = (ExtendedImage)sender;
Classes.Util.UiThread.Invoke(() =>
{
this.ImageResponse.Source = imageResponse.ToBitmap();
});
}
Classes.Util.UiThread 是我用来调用 UI Thread 的辅助类
this.ImageResponse 是一个标准的图像控件
【讨论】:
它是动画 GIF 吗?如果没有,我会尝试将 GIF 转换为另一种受支持的文件格式,然后再在您的应用中使用它。
【讨论】:
WP7 Silverlight 支持 JPG/PNG。
【讨论】:
根据http://msdn.microsoft.com/en-us/library/ff462087(VS.92).aspx,Silverlight 图像控件不支持 GIF 文件。
通过使用 ImageTools,您可以在设备上即时将 GIF 文件转换为其他文件。如果您使用的是您可以控制的 gif 文件(即,您将它们捆绑在 XAP 中,或者它们来自您的网络服务器。)您应该使用这些文件的转换版本。
这意味着应用程序必须做的更少。
连锁反应是:
1. 您将不得不编写更少的代码。
2. 应用程序需要做的工作更少,因此性能会稍微好一些。
当然,这不包括动画 GIF。对于这些,您需要使用不同的方法。
【讨论】: