Windows Phone 7でgifを表示する

Silverlightではgifの対応がされていないので、必然とWindows Phone 7もgifを扱うことができません。Twitterのプロフィールの画像なんかでもまだまだgifを使っているところも多いのでgifを扱えないと結構不便です。
そこで今回はImageToolsというのを使ってWindows Phone 7上でgifを表示させてみます。
ImageToolsというのはSilverlight用のライブラリで、画像を読み込むあるいは保存するツールで、さまざまなフォーマット(jpg,png,bmp,gif)に対応しています。ただし現時点でgifは読み込みだけで保存することはできません。
まずはこちらからImageToolsダウンロードします。現時点でバージョンは0.30です。
それを解凍します。必要なものはImageTools 0.30\bin\Phoneにすべて入っています。
それでは早速プロジェクトを立ち上げ、ImageTools.dll、ImageTools.IO.Gif.dll、ImageTools.Utils.dllを参照に追加します。
次に適当にImageを配置します(Nameはデフォルトでimage1です)。このImageにgifを表示します。

MainPage.xaml.csは下記のようになります。

using System.Windows;
using Microsoft.Phone.Controls;

using ImageTools;    // 追加
using ImageTools.IO.Gif;    // 追加

namespace LoadGif
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            ImageTools.IO.Decoders.AddDecoder<GifDecoder>();    // デコーダの追加

            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            var url = "http://k.yimg.jp/images/top/sp/logo.gif";    // Yahoo!のロゴ

            var image = new ExtendedImage();
            image.DownloadCompleted += (s, evt) =>
            {
                // gifファイルのダウンロードが終わったら、UIスレッドでビットマップに変換して表示する
                this.Dispatcher.BeginInvoke(() =>
                {
                    image1.Source = image.ToBitmap();
                });
            };
            // UriSourceにセットするとダウンロードが始まる
            image.UriSource = new System.Uri(url, System.UriKind.RelativeOrAbsolute);
        }
    }
}

コンパイルして実行すると以下のようになります。

これでgifの表示ができました。デコーダの追加とExtendedImageの使い方が分かれば簡単に使えると思います。
しかし、実はこれでは表示されないgifが存在します。これはバグとして扱われていて現在修正中のようです(修正はされているようですが正式には組み込まれてないようです)。CodePlex Archive