烏賊先生のプログラミング道場
プログラミング資料

グラフィックス TIPS

§ 簡単に画像を表示 §

PictureBox.Imageプロパティを使用
表示中の画像ファイルが削除出来ない問題の解決法
画像の配置方法を指定
指定した場所の画像を表示
BackgroundImageプロパティを使用
WEB上の画像ファイルを直接PictureBoxに表示


 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の左上に表示する(画像の大きさは、基の儘)。
StretchImagePictureBoxの大きさ一杯に画像が表示される様に、画像を拡大・縮小して表示する。
AutoSizePictureBoxの大きさを画像の大きさと同じに仕て表示する。
CenterImage画像をPictureBoxの中央に表示する(画像の大きさは、基の儘)。
ZoomPictureBoxの大きさに合せて画像を拡大又は縮小して表示する(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( );

資料ダウンロード 資料ダウンロード 資料ダウンロード

1