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