在使用Silverlight的WP7应用程序中显示GIF图片

19
我希望在我的WP7应用程序中显示gif。有什么方法可以实现吗?
我已经尝试了这个http://imagetools.codeplex.com/,但无法在WP7上运行。
非常感谢您的帮助。
6个回答

19

实际上它是可行的,但缺少一些文档。

在一些困难后,以下是如何使用它:

  • 引用 ImageTools
  • 引用 ImageTools.Controls
  • 引用 ImageTools.IO.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>();

那能够支持展示动态GIF吗? - smohamed
1
我似乎无法让它工作,代码编译了,但在运行时初始化时抛出了关于不兼容绑定类型的异常。由于这篇文章已经有一年了,ImageTools库是否已更新以与此不兼容? - Esko
我正在使用相同的概念来显示GIF图像。但是,有时我会遇到这个错误:“ImageTools的类型初始化程序引发了异常。”如果您知道这个错误,请帮助我。 - Jeeva
在我的情况下根本不起作用,它没有图像(http://stackoverflow.com/questions/9667840/how-to-use-gif-animated-image-in-wp-7) - revolutionkpi
非常感谢您提供这个宝贵的信息。我不得不添加这个.DataContext = this; 才能让我的解决方案正常工作(以防其他人遇到同样的问题) :) - Svein Erik

3

我正在使用相同的概念来显示gif图像。但是,有时会出现错误:“ImageTools的类型初始化程序引发了异常。”如果您知道这个错误,请帮助我。 - Jeeva

2

我曾经苦苦挣扎地尝试了很多方法,但最终找到了一种能够显示静态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线程。

this.ImageResponse是标准图像控件。


1

这是一个动态GIF吗?如果不是,我建议在将其用于您的应用程序之前,尝试将GIF转换为另一种支持的文件格式。


1

WP7 Silverlight支持JPG/PNG格式。


1
是的,这就是为什么我在寻找外部库的原因 :) - Tim

1

根据http://msdn.microsoft.com/en-us/library/ff462087(VS.92).aspx,Silverlight图像控件不支持GIF文件。

通过使用ImageTools,您可以在设备上动态将GIF文件转换为其他格式。如果您正在使用自己控制的gif文件(即它们被捆绑在XAP中或来自您的Web服务器),则应该使用这些文件的转换版本。

这意味着应用程序需要做更少的工作。
影响是:
1. 您需要编写更少的代码。
2. 应用程序需要做更少的工作,因此性能会略有提高。

当然,这并不包括动画GIF。对于这些,您需要使用不同的方法。


我刚刚检查了你提供的链接,它说GIF现在在所有设备上都得到支持。 - T3rm1
1
@T3rm1 嗯,这可能会让人感到困惑。操作系统支持这4种格式(bmp、jpg、png和gif),因此您可以在电子邮件或网页上查看它们。然而,Silverlight仅支持JPG和PNG格式(请参见备注http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage(v=vs.95).aspx)。这意味着您无法直接在代码中使用GIF。 - Matt Lacey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接