情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

WPFで画像をダウンロードして表示する

参考:WPF Tips(5) URLの画像を表示する

上のブログ記事では、DownloadCompletedイベントを使っていますが、一度ダウンロードされた画像はキャッシュされ、ダウンロードは一度しか行われないので、DownloadCompletedイベントは一度しか発生しません。

なので、同じ画像を複数回表示するような場合は、DownloadCompletedイベントが最初の表示でしか呼ばれないため、下のように表示がおかしなことになってしまいます。

このような場合に対応するためChangedイベントを使います。Changedイベントは表示する度に呼ばれますので上のような問題は発生しません。

BitmapImage imageSource = new BitmapImage(new Uri(url));
/*imageSource.DownloadCompleted += new EventHandler((sender2, e2) =>
{
    if (imageSource.PixelWidth > imageSource.PixelHeight)
    {
        image.Width = 256.0;
        image.Height = 256.0 * ((double)imageSource.PixelHeight / (double)imageSource.PixelWidth);
    }
    else
    {
        image.Width = 256.0 * ((double)imageSource.PixelWidth / (double)imageSource.PixelHeight);
        image.Height = 256.0;
    }
});*/
imageSource.Changed += (sender2, e2) =>
{
    if (imageSource.PixelWidth > imageSource.PixelHeight)
    {
        image.Width = 256.0;
        image.Height = 256.0 * ((double)imageSource.PixelHeight / (double)imageSource.PixelWidth);
    }
    else
    {
        image.Width = 256.0 * ((double)imageSource.PixelWidth / (double)imageSource.PixelHeight);
        image.Height = 256.0;
    }
};
image.Stretch = Stretch.Uniform;
image.Source = imageSource;

この場合、下のように何度表示しても狙った表示になります。

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-C#, wpf