|
.NET TIPS PictureBoxコントロールにグラフィックを描画するには?デジタルアドバンテージ 遠藤 孝信2006/06/09 |
![]() |
|
|
|
Windowsフォーム用のPictureBoxコントロールは基本的に画像ファイルやWeb上の画像を表示するためのものだが、プログラムからグラフィックを描画するためにPictureBoxコントロールを使いたいというニーズは多い。本稿ではPictureBoxコントロール(以下、単にPictureBox)へ描画する方法についてまとめる。
任意のタイミングで直接描画
例えば、ボタンがクリックされたときにPictureBoxにグラフィックを描画するには、次のようにCreateGraphicsメソッドによりGraphicsオブジェクト(System.Drawing名前空間)を取得し、それに対して描画を行えばよい(以降ではmyPaintingメソッドが実際の描画を行うものとする)。
| ||
| ボタンがクリックされたときにPictureBoxに描画するコード(上:C#、下:VB) | ||
| C#版ではpictureBox1、VB版ではPictureBox1がPictureBoxコントロールのインスタンスとする。また、myPaintingメソッドが実際にグラフィックの描画を行うものとする。 |
ただしこのようにして描画した内容は、ウィンドウをリサイズしたとき(ウィンドウをいったん小さくしてから元のサイズに戻した場合など)や、PictureBoxを覆っていた別のウィンドウが移動したときなどに消えてしまう(リサイズやほかのウィンドウなどにより無効になった画面領域はプログラム自身で再描画する必要があるため)。
Paintイベントで描画
描画したグラフィックの内容が消されずに常に表示されるようにするには、Paintイベントが発生したタイミングでグラフィックを描画しなければならない。これは、グラフィックの描画に必要なデータ(例えばラインならその始点と終点の座標など)をすべて保持しておき、Paintイベント・ハンドラですべてのグラフィックを再描画できるように常に準備しておく必要があることを意味する。
Paintイベント・ハンドラとなるメソッドでは、メソッドの第2パラメータのGraphicsプロパティからGraphicsオブジェクトを取得できるようになっているため、次のようにしてPictureBoxにグラフィックを描画できる。
| ||
| PaintイベントでPictureBoxに描画するコード(上:C#、下:VB) | ||
| Paintイベントは再描画が必要な場合に発生する。 |
以上の2つの描画方法は、実際にはPictureBoxに限ったものではなく、フォームも含め基本的にすべてのコントロールで可能だ。いうなれば、これらの方法は単にコントロールの表面にグラフィックを上書きしているようなものだ。
また、描画されたグラフィックの保存は、.NET Framework 2.0では「TIPS:フォームやコントロールの画像をファイルに保存するには?」で示した方法により可能だが、.NET Framework 1.xでは容易でない。
Imageプロパティで指定したビットマップに描画
PictureBoxにグラフィックを描画する場合のより合理的な方法は、あらかじめPictureBoxと同じサイズのBitmapオブジェクト(System.Drawing名前空間)を作成してPictureBoxのImageプロパティに設定しておき、グラフィックの描画はそのBitmapオブジェクトに対して行うというやり方だ。
次のサンプル・コードでは、フォームのコンストラクタでBitmapオブジェクトを作成し、ボタンがクリックされたときにグラフィックの描画を行う。
| ||
| PaintイベントでPictureBoxに描画するコード(上:C#、下:VB) | ||
| Paintイベントはコントロールの再描画が必要な場合に発生する。 |
この方法では、PictureBox自身がPaintイベント発生時にImageプロパティに設定されているBitmapオブジェクトを再描画するため、プログラムで明示的にPaintイベントを処理する必要はない。
またこのようにして描画を行っておけば、その画像をファイルに保存したい場合にも、BitmapオブジェクトのSaveメソッドを使用するだけでよい(参照「TIPS:画像をファイルに保存するには?」)。
ただしBitmapオブジェクトに対して描画したものをすぐにPictureBoxに反映するためには、PictureBoxのRefreshメソッドを呼び出して、PictureBoxを強制的に更新しなければならない(RefreshメソッドはPictureBoxの画像領域を無効にし、Paintイベントを発生させる)。![]()
| カテゴリ:Windowsフォーム 処理対象:コントロール 使用ライブラリ:PictureBoxコントロール(System.Windows.Forms名前空間) 使用ライブラリ:Graphicsクラス(System.Drawing名前空間) 使用ライブラリ:Bitmapクラス(System.Drawing名前空間) 関連TIPS:フォームやコントロールの画像をファイルに保存するには? 関連TIPS:画像をファイルに保存するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


