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

时间:2010-11-11 08:33:00

标签: silverlight windows-phone-7 gif

我想在我的WP7应用程序中显示gif。 有没有办法实现这个目标?

我尝试过这个http://imagetools.codeplex.com/,但无法使用WP7。

提前感谢您提供任何帮助

6 个答案:

答案 0 :(得分: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>();

答案 1 :(得分:3)

查看Jamie Rodriguez的帖子,了解如何在WP7上使用GIF。他使用CodePlex的ImageTools项目。

http://blogs.msdn.com/b/jaimer/archive/2010/11/23/working-with-gif-images-in-windows-phone.aspx

答案 2 :(得分: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是一个标准的图像控件

答案 3 :(得分:1)

它是动画GIF吗?如果没有,我会尝试将GIF转换为其他支持的文件格式,然后再在您的应用中使用。

答案 4 :(得分:1)

WP7 Silverlight支持JPG / PNG。

答案 5 :(得分:1)

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

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

这意味着应用程序必须做得更少 敲门效应是:
你必须少写代码 2.该应用程序将不得不做更少的工作,因此会稍微好一点。

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