【问题标题】:Display GIF in a WP7 application with Silverlight使用 Silverlight 在 WP7 应用程序中显示 GIF
【发布时间】:2011-05-08 08:14:44
【问题描述】:

我想在我的 WP7 应用程序中显示 gif。 有什么方法可以实现吗?

我已经尝试过这个http://imagetools.codeplex.com/,但无法使其与 WP7 一起使用。

提前感谢您的帮助

【问题讨论】:

    标签: silverlight windows-phone-7 gif


    【解决方案1】:

    事实上, 它工作正常,但缺少一些文档。

    经过一些麻烦,这里是如何使用它:

    • 参考 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>();
    

    【讨论】:

    • 那会支持显示动图吗?
    • 我似乎无法让它工作,代码编译并且除了在运行时初始化期间之外的所有内容都会引发关于不兼容绑定类型的异常。由于这篇文章已经发布了大约一年,ImageTools 库是否以与此不兼容的方式进行了更新?
    • 我使用相同的概念来显示 gif 图像。但是,有时我收到此错误“'ImageTools' 的类型初始化程序引发异常。”.. 如果你知道这个错误帮助我。
    • 它在我的情况下根本不起作用,它没有图像(stackoverflow.com/questions/9667840/…
    • +1 非常感谢您提供宝贵的答案。它帮助了我并挽救了我的一天。
    【解决方案2】:

    在此处查看 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 图像。但是,有时我收到此错误“'ImageTools' 的类型初始化程序引发异常。”.. 如果你知道这个错误帮助我。
    【解决方案3】:

    我努力让接受的答案起作用。以下解决方案对我来说可以显示静态 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 是一个标准的图像控件

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        WP7 Silverlight 支持 JPG/PNG。

        【讨论】:

        • 是的,这就是我寻找外部库的原因 :)
        【解决方案6】:

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

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

        这意味着应用程序必须做的更少。
        连锁反应是:
        1. 您将不得不编写更少的代码。
        2. 应用程序需要做的工作更少,因此性能会稍微好一些。

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

        【讨论】:

        • 我刚刚检查了您提供的链接,它说所有设备(现在)都支持 GIF。
        • @T3rm1 好吧,这可能会造成混淆。该操作系统支持这 4 种格式(bmp、jpg、png 和 gif),因此您可以在电子邮件或网页中查看它们。但是,Silverlight 仅支持 JPG 和 PNG 格式(请参阅备注 msdn.microsoft.com/en-us/library/…)。这意味着您不能直接在代码中使用 GIF。
        猜你喜欢
        • 2011-06-09
        • 1970-01-01
        • 2012-04-20
        • 2010-11-30
        • 1970-01-01
        • 2011-09-13
        • 2011-05-18
        • 1970-01-01
        • 2011-03-28
        相关资源
        最近更新 更多