PictureBox.Imageプロパティを使用
ピクチャボックスに画像を表示させる場合、一番簡単な方法は、PictureBoxのImageプロパティに表示するイメージを指定する事で有る。下記の例では、此の方法に依り、ピクチャ
ボックスpicDispに画像ファイル "C:\test.jpg" を表示させて居る。
Visual Basic 2005/2008/2010 |
picDisp.Image = Image.FromFile( "C:\test.jpg" )
|
Visual C# 2005/2008/2010 |
picDisp.Image = Image.FromFile( @"C:\test.jpg" );
|
亦、此の様に仕て表示した画像を消去するには、下記の様にする。
Visual Basic 2005/2008/2010 |
If picDisp.Image IsNot Nothing Then
picDisp.Image.Dispose( )
picDisp.Image = Nothing
End If
|
Visual C# 2005/2008/2010 |
if ( PictureBox1.Image != null )
{
picDisp.Image.Dispose( );
picDisp.Image = null;
}
|
猶、ピクチャボックスに画像を描画する最も一般的な方法は、「画像ファイルを表示」で紹介して居る。
※ |
此の方法で表示した画像ファイルは、画像を読み込む為に使用されたストリームが開き放しに成る為、ロックされ、削除出来なく成る。 |
表示中の画像ファイルが削除出来ない問題の解決法
上記の様に、Image.FromFileメソッドで画像ファイルを読み込んだり、Bitmapクラスのコンストラクタで画像ファイルを読み込んだりして、画像ファイルを表示した時は、其の
画像ファイルがロックされて仕舞い、削除する事が出来なく成る(ファイル名の変更や、ファイルの上書き保存も出来ない)。
此れは、前述の様に、画像を読み込む為に使用されたストリームが開き放しに成る為で有る。此の問題を回避するには、FileStreamオブジェクトやStreamオブジェクトを使用し、
読み込んだ後、明示的にストリームを閉じる事で有る。
Visual Basic 2005/2008/2010 |
Dim Fs As System.IO.FileStream
Fs = New System.IO.FileStream( "C:\test.jpg", _
System.IO.FileMode.Open, System.IO.FileAccess.Read )
picDisp.Image = System.Drawing.Image.FromStream( Fs )
Fs.Close( )
|
Visual C# 2005/2008/2010 |
System.IO.FileStream fs;
fs = new System.IO.FileStream( @"C:\test.jpg",
System.IO.FileMode.Open, System.IO.FileAccess.Read );
picDisp.Image = System.Drawing.Image.FromStream( fs );
fs.Close( );
|
※ |
System.IO.File.OpenメソッドでStreamオブジェクトを取得しても良い。 |
画像の配置方法を指定
PictureBox.Imageプロパティで表示する画像の配置方法を指定するには、PictureBox.SizeModeプロパティを使用する。SizeModeプロパティに指定出来るPictureBoxSizeMode
構造体のメンバを以下に示す。既定では、Normalと成る。
PictureBoxSizeMode | 説明 |
Normal | 画像をPictureBoxの左上に表示する(画像の大きさは、基の儘)。 |
StretchImage | PictureBoxの大きさ一杯に画像が表示される様に、画像を拡大・縮小して表示する。 |
AutoSize | PictureBoxの大きさを画像の大きさと同じに仕て表示する。 |
CenterImage | 画像をPictureBoxの中央に表示する(画像の大きさは、基の儘)。 |
Zoom | PictureBoxの大きさに合せて画像を拡大又は縮小して表示する(StretchImageと異なり、画像のサイズ比率は保持する。画像はPictureBoxの中央に表示される。.NET Framework 2.0以降で有効)。 |
下記の例では、画像ファイル "C:\test.jpg" をピクチャボックス(picDisp)の大きさに合わせて表示させる様に仕て居る。
Visual Basic 2005/2008/2010 |
' 画像の大きさをピクチャボックスに合わせる様に設定
picDisp.SizeMode = PictureBoxSizeMode.StretchImage
' 画像の表示
picDisp.Image = Image.FromFile( "C:\test.jpg" )
|
Visual C# 2005/2008/2010 |
// 画像の大きさをピクチャボックスに合わせる様に設定
picDisp.SizeMode = PictureBoxSizeMode.StretchImage;
// 画像の表示
picDisp.Image = Image.FromFile( @"C:\test.jpg" );
|
指定した場所の画像を表示
.NET Framework 2.0以降では、PictureBox.ImageLocationプロパティを使って、指定したURIの画像をPictureBoxに表示する事が出来る。此の方がImageプロパティに依る
方法よりも簡単で有る。
ImageLocationプロパティで読み込んだ画像は、Imageプロパティに設定される。
下記に、画像ファイル "C:\test.bmp" を表示する例を示す。猶、ImageLocationに "C:\test.bmp" の様なパスを指定しても良いが、下記の例の様に、"file:///" とする
方法が推奨されて居る。
Visual Basic 2005/2008/2010 |
' picDispに"C:\test.bmp"を表示
picDisp.ImageLocation = "file:///C:/test.bmp"
|
Visual C# 2005/2008/2010 |
// picDispに"C:\test.bmp"を表示
picDisp.ImageLocation = "file:///C:/test.bmp";
|
ImageLocationプロパティに付いての詳細は、「ピクチャボックスで非同期的に画像を読み込み、表示」で説明して居る。
BackgroundImageプロパティを使用
画像を表示する目的で使用するのは適当では無いが、Control.BackgroundImageプロパティに依り、画像を表示する事も出来る。此の場合は通常、画像が並べれられ表示される。
.NET Framework 2.0以降では、Control.BackgroundImageLayoutプロパティに依り、背景画像の配置法を変更する事が出来る。BackgroundImageLayoutプロパティに指定出来る
ImageLayout列挙体のメンバを下記に示す。
ImageLayout | 説明 |
Tile | 画像を全体に並べて表示する。 |
None | 画像をコントロールの左上に表示する。 |
Center | 画像をコントロールの中央に表示する。 |
Stretch | 画像をコントロールの大きさに合わせて伸縮して表示する。 |
Zoom | 画像をコントロールの大きさに合わせて伸縮して表示する(StretchImageと異なり、画像のサイズ比率は保持する。位置は、コントロールの中央)。 |
BackgroundImageLayoutをZoomに仕て背景画像を設定する例を、下記に示す。
Visual Basic 2005/2008/2010 |
picDisp.BackgroundImageLayout = ImageLayout.Zoom
picDisp.BackgroundImage = Image.FromFile( "C:\test.jpg" )
|
Visual C# 2005/2008/2010 |
picDisp.BackgroundImageLayout = ImageLayout.Zoom;
picDisp.BackgroundImage = Image.FromFile( @"C:\test.jpg" );
|
WEB上の画像ファイルを直接PictureBoxに表示
WEB上の画像ファイルを直接PictureBoxにダウンロードして表示する例を、下記に示す。
Visual Basic 2005/2008/2010 |
' 取得するWEB上の画像ファイルのURL
Dim Url As String = "http://www.xxx.ne.jp/title.gif"
' WebClientクラスのインスタンス生成
Dim Wc As System.Net.WebClient = New System.Net.WebClient( )
' 指定したURLを持つリソースからダウンロードしたデータの読取可能ストリームのオープン
Dim St As System.IO.Stream = Wc.OpenRead( Url )
' 指定したデータストリームからImageオブジェクトを生成
picDisp.Image = Image.FromStream( St )
' 現在のストリームを閉じリソースの解放
St.Close( )
|
Visual C# 2005/2008/2010 |
String url = "http://www.xxx.ne.jp/title.gif";
System.Net.WebClient wc = new System.Net.WebClient( );
System.IO.Stream St = wc.OpenRead( url );
picDisp.Image = Image.FromStream( st );
st.Close( );
|