WPFで画像をダウンロードして表示する
上のブログ記事では、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;
この場合、下のように何度表示しても狙った表示になります。

スポンサーリンク