Отображение GIF в приложении WP7 с Silverlight - PullRequest
19 голосов
/ 11 ноября 2010

Я хотел бы отобразить GIF в моем приложении WP7. Есть ли способ достичь этого?

Я пробовал это http://imagetools.codeplex.com/, но не могу заставить его работать с WP7.

Заранее спасибо за любую помощь

Ответы [ 6 ]

19 голосов
/ 11 ноября 2010

На самом деле, он работает, но ему не хватает документации.

После некоторых проблем вот как его использовать:

  • ссылка ImageTools
  • ссылка ImageTools.Controls
  • reference 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>();
3 голосов
/ 25 декабря 2010

Ознакомьтесь с постом Джейми Родригеса об использовании GIF-файлов с WP7.Он использует проект ImageTools от CodePlex.

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

2 голосов
/ 08 августа 2012

Я изо всех сил пытался заставить принятый ответ работать.Следующее решение помогло мне отобразить статический 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 - это вспомогательный класс, который я использую для вызова потока пользовательского интерфейса

this.ImageResponse - это стандартный элемент управления изображением

1 голос
/ 11 ноября 2010

Согласно http://msdn.microsoft.com/en-us/library/ff462087(VS.92).aspx элемент управления изображением Silverlight не поддерживает файлы GIF.

Используя ImageTools, вы конвертируете файл GIF во что-то другое на лету на устройстве. Если вы используете gif-файлы, которые вы контролируете (т.е. вы связываете их в XAP или они поступают с вашего веб-сервера.), Вам следует использовать преобразованные версии этих файлов.

Это будет означать, что приложение должно делать меньше.
Эффект от удара таков:
1. Вам придется писать меньше кода.
2. Приложению придется выполнять меньше работы, поэтому оно будет работать немного лучше.

Конечно, это не распространяется на анимированные GIF-изображения. Для этого вам нужно использовать другой подход.

1 голос
/ 11 ноября 2010

WP7 Silverlight поддерживает JPG / PNG.

1 голос
/ 11 ноября 2010

Это анимированный GIF? Если нет, я бы попытался преобразовать GIF в другой поддерживаемый формат файла, прежде чем использовать его в своем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...