§18 グラフィックス(2)1 | プログラミング実習 |
グラフィックス(1)で描画した図形は、ウィンドウを最小化したり、ほかのウィンドウの下になったりすると消えてしまう。ここでは、描画した図形が消えないようにする方法について学習する。また、画像ファイルを読み込んだり、描画した画像を保存する方法について学習する。
利用するオブジェクト等 |
ビットマップ(Bitmap)クラス |
【1】 プログラム作成の準備
操作 1 「17.グラフィックス(1)」の実習で作成したプロジェクト「実習17グラフィックス1」を開く。フォーム(Form1)のTextプロパティを「グラフィックス2」に変更する。
Text グラフィックス2
【2】 再描画
ウィンドウが最小化から元に戻ったりするとき、そのウィンドウは再描画される。この時、これまで描画した画像も再描画されるようにする。
操作 2 ビットマップオブジェクトをピクチャボックスのImageプロパティに設定するメソッドAutoRedrawを次のように作成する。
Private Function AutoRedraw(ByVal pict As PictureBox) As
Graphics
If pict.Image Is Nothing Then
'※1
pict.Image = New Bitmap(pict.ClientRectangle.Width,
pict.ClientRectangle.Height)
End If
Return Graphics.FromImage(pict.Image)
'※2
End Function
※1 Imageプロパティに何も設定されていないときだけ、ビットマップオブジェクトを作成して、Imageプロパティに設定する。
※2 Imageプロパティのグラフィックスを作成して返却する。
【ピクチャボックスへのグラフィックス描画】
ウィンドウが最小化から元に戻ったりするとき、Paintイベント(再描画が必要になったときに発生するイベント)が発生し、そのウィンドウは再描画される。この時、ピクチャボックスにはImageプロパティに設定された画像が描画される。
グラフィックス(1)の実習では、Imageプロパティは何も設定しなかったので、次図のようなイメージとなる。また、グラフィックスクラスで描画してもImageプロパティは変化しない(空のまま)ので、再描画の時に描画した図形が消えた。
一般的に、ピクチャボックスに画像を設定(表示)するには、次図のようにImageプロパティに画像ファイルなどを設定する。したがって、ウィンドウの最小化などで画像が消えることはなかった。
そこで、図形を描画する場所として、ビットマップ(Bitmap)を用意し、Imageプロパティに設定する(次図)。これをグラフィックスに関連づけて描画すると消えなくなる。
グラフィクスクラスで描画した後は、ピクチャボックスのRefreshメソッドで再描画する。
操作 3 グラフィックスクラス作成をCreateGraphicsメソッドから作成したAutoRedrawメソッドに変更して、画像が消えないようにする。下線部のプログラムを追加・修正する。
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'グラフィックオブジェクトの作成
Dim gr As Graphics = PictureBox1.CreateGraphics
'ピクチャボックス用
↓
= AutoRedraw(PictureBox1)
Dim gpen As New Pen(Color.Black, 5) 'ペンオブジェクト
'直線描画
gpen.DashStyle = Drawing2D.DashStyle.Custom
'破線に設定
gpen.EndCap = Drawing2D.LineCap.ArrowAnchor
'終端に矢印を設定
gr.DrawLine(gpen, 10, 10, 190, 190)
gpen.Color = Color.Red
'ペン色の設定
gr.DrawLine(gpen, 190, 10, 10, 190)
PictureBox1.Refresh() '再描画
'オブジェクト解放
gr.Dispose()
gpen.Dispose()
End Sub
実行して、[直線]ボタンをクリックする。ウィンドウを最小化してから戻しても直線は消えない。そのほかの図形はまだ消える。
操作 4 同じようにして、残りの描画処理にもプログラムを追加・修正する。対象となるメソッドはButton2_Click〜Button6_Clickである。
実行して、図形を描画し、ウィンドウを最小化してから戻しても図形は消えない。
§18 グラフィックス(2)1 | Copyright©2009 Hiroshi Masuda |