PictureBoxコントロールにグラフィックを描画するには?.NET TIPS

» 2006年06月09日 05時00分 公開
[遠藤孝信デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「.NET TIPS」のインデックス

連載目次

 Windowsフォーム用のPictureBoxコントロールは基本的に画像ファイルやWeb上の画像を表示するためのものだが、プログラムからグラフィックを描画するためにPictureBoxコントロールを使いたいというニーズは多い。本稿ではPictureBoxコントロール(以下、単にPictureBox)へ描画する方法についてまとめる。

任意のタイミングで直接描画

 例えば、ボタンがクリックされたときにPictureBoxにグラフィックを描画するには、次のようにCreateGraphicsメソッドによりGraphicsオブジェクト(System.Drawing名前空間)を取得し、それに対して描画を行えばよい(以降ではmyPaintingメソッドが実際の描画を行うものとする)。

// ボタンのClickイベント・ハンドラ
private void button1_Click(object sender, EventArgs e) {
  Graphics g = pictureBox1.CreateGraphics();
  myPainting(g);
}

' ボタンのClickイベント・ハンドラ
Private Sub Button1_Click(ByVal sender As Object, ByVal e AsEventArgs) Handles Button1.Click
  Dim g As Graphics = PictureBox1.CreateGraphics()
  myPainting(g)
End Sub

ボタンがクリックされたときにPictureBoxに描画するコード(上:C#、下:VB)
C#版ではpictureBox1、VB版ではPictureBox1がPictureBoxコントロールのインスタンスとする。また、myPaintingメソッドが実際にグラフィックの描画を行うものとする。

 ただしこのようにして描画した内容は、ウィンドウをリサイズしたとき(ウィンドウをいったん小さくしてから元のサイズに戻した場合など)や、PictureBoxを覆っていた別のウィンドウが移動したときなどに消えてしまう(リサイズやほかのウィンドウなどにより無効になった画面領域はプログラム自身で再描画する必要があるため)。

Paintイベントで描画

 描画したグラフィックの内容が消されずに常に表示されるようにするには、Paintイベントが発生したタイミングでグラフィックを描画しなければならない。これは、グラフィックの描画に必要なデータ(例えばラインならその始点と終点の座標など)をすべて保持しておき、Paintイベント・ハンドラですべてのグラフィックを再描画できるように常に準備しておく必要があることを意味する。

 Paintイベント・ハンドラとなるメソッドでは、メソッドの第2パラメータのGraphicsプロパティからGraphicsオブジェクトを取得できるようになっているため、次のようにしてPictureBoxにグラフィックを描画できる。

// PictureBoxのPaintイベント・ハンドラ
private void pictureBox1_Paint(object sender, PaintEventArgs e) {
  myPainting(e.Graphics);
}

' PictureBoxのPaintイベント・ハンドラ
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint
  myPainting(e.Graphics)
End Sub

PaintイベントでPictureBoxに描画するコード(上:C#、下:VB)
Paintイベントは再描画が必要な場合に発生する。

 以上の2つの描画方法は、実際にはPictureBoxに限ったものではなく、フォームも含め基本的にすべてのコントロールで可能だ。いうなれば、これらの方法は単にコントロールの表面にグラフィックを上書きしているようなものだ。

 また、描画されたグラフィックの保存は、.NET Framework 2.0では「TIPS:フォームやコントロールの画像をファイルに保存するには?」で示した方法により可能だが、.NET Framework 1.xでは容易でない。

Imageプロパティで指定したビットマップに描画

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。