酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Phone 7で画像ファイルをダウンロードする。

僕が大抵モバイル端末で何かのクライアントを作ろうと思った時に、やりたい事の1つに出てくるのがビューアですね。最近のWebサイトはモバイル端末に優しくなったとはいえ、iPhoneガラケー向けで、IEMobileには相変わらず厳しいのが現状です。そこで「ビューアを作ろう!」という流れになります。


まぁそれはどうでも良いとして、Windows Phone 7で画像をダウンロードしてみましょう。
HttpWebRequestを使っても良いのですが、今回はより簡単なWebClientクラスを使います。

Silverlightで使えるWebClientクラスのメソッドは、DownloadStringAsyncメソッドとOpenReadAsyncメソッドの2つです。

DownloadStringAsyncメソッドは、xmlやhtmlなどテキストデータを取得する為のメソッドで、OpenReadAsyncメソッドは、バイナリデータを取得する為のメソッドになります。画像ファイルはバイナリデータですので、今回はOpenReadAsyncメソッドを使用します。ダウンロードが完了すると、OpenReadCompletedイベントが発生します。


適当なところにimageコントロールを配置しています。

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    WebClient wc = new WebClient();
    wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
    wc.OpenReadAsync(new Uri("http://news.ameba.jp/imgs/0402akiba.jpg", UriKind.Absolute));
}

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    if (e.Error != null) return;

    System.Windows.Media.Imaging.BitmapImage bi
        = new System.Windows.Media.Imaging.BitmapImage();
    bi.SetSource(e.Result);

    image1.Source = bi;
}

ダウンロードが完了後は、BitmapImageでストリームを読み込み、image1.Sourceに設定して画面に表示しています。