気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
今日は、URLで指定された画像をWPFで表示する方法を紹介します。
画像の表示には「Image」クラスを使用します。

早速、コードを見てください。

   Image image = new Image();
   BitmapImage imageSource =  new BitmapImage(new Uri(画像のURL));
   image.Source = imageSource;

上記のサンプルでは、ImageクラスのインスタンスをC#側で生成していますが、
XAMLで宣言しても同じです。

URLの画像の取得には「BitmapImage」クラスを使用します。
画像の指定方法はコンストラクタにUriを指定するだけです。

そして、そのBitmapImageのインスタンスをImageのSourceプロパティに設定します。
画像のダウンロードは非同期で行われ、完了次第画面に表示されます。

これだけでは一点問題があります。

Imageのサイズが自動的に調整され、大きくなったりしていまいます。
これを防ぐためには以下のようにします。

   Image image = new Image();
   BitmapImage imageSource =  new BitmapImage(new Uri(画像のURL));
   image.Source = imageSource;

   //画像のロード完了イベントを処理して、画像のサイズを設定する
   imageSource.DownloadCompleted += new EventHandler((Object sender,EventArgs e) =>
   {
       image.Width = imageSource.PixelWidth;
       image.Height = imageSource.PixelHeight;
   });


BitmapImageクラスのPixelWidth、PixelHeightプロパティを使用すれば良いのですが、
先ほど、言いましたように画像のダウンロードは非同期で行われるため、
Sourceを設定した直後に取得しても0が返されてしまいます。

そこで上記のコードのように、BitmapImageクラスのDownloadCompletedイベントを処理して、
画像のロード完了後に画像のサイズを取得するようにします。
(ハンドラはラムダ式の匿名メソッドにしました。)

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/74-82acc855

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。