/// 実習H2(節約バージョン) グラフィックス(1) | プログラミング実習 |
各ボタンのメソッド(イベントハンドラ)では、「Graphicsオブジェクト作成」、「描画」、「更新」、「解放」の順でプログラムされている。オブジェクトを作成して、プログラム終了まで解放しなければ、それぞれのメソッドは、「描画」、「更新」だけで済む。すなわち、処理が節約できる。
作成したGraphicsオブジェクトを格納する変数をメンバ変数として、すべてのメソッドの中で参照できるようにする。実習H2のプログラムを変更していく。
コード(プログラム)
Public Class Form1
Dim gr As Graphics 'Graphicsオブジェクト用
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
'Bitmapオブジェクト作成
picCanvas.Image = New Bitmap(picCanvas.Width, picCanvas.Height)
'Graphicsオブジェクト作成
gr = Graphics.FromImage(picCanvas.Image)
End Sub
Private Sub btnLine_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnLine.Click
'Graphicsオブジェクト作成
Dim gr As Graphics = Graphics.FromImage(picCanvas.Image)
'水平線、黒色
gr.DrawLine(Pens.Black, 10, 100, 290, 100)
'垂直線、赤色
gr.DrawLine(Pens.Red, 70, 10, 70, 290)
'斜線、青色
gr.DrawLine(Pens.Blue, 30, 30, 270, 270)
'picCanvasの更新
picCanvas.Refresh()
'オブジェクト解放
gr.Dispose()
End Sub
End Class
H2の2 (消去)
コード(プログラム) 追加部分のみ。
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnClear.Click
'Graphicsオブジェクト作成
Dim gr As Graphics = Graphics.FromImage(picCanvas.Image)
'グラフィックス消去()
gr.Clear(Color.White)
picCanvas.Refresh() 'picCanvasの更新
gr.Dispose() 'オブジェクト解放
End Sub
H2の3 (四角形)
コード(プログラム) 追加部分のみ。
Private Sub btnShikaku_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btnShikaku.Click
'Graphicsオブジェクト作成
Dim gr As Graphics = Graphics.FromImage(picCanvas.Image)
'長方形、緑色、始点(10,10)、幅200pix、高さ150pix
gr.DrawRectangle(Pens.Green, 10, 10, 200, 150)
'正方形、オレンジ色、始点(50,30)、幅150pix、高さ150pix
gr.DrawRectangle(Pens.Orange, 50, 30, 150, 150)
picCanvas.Refresh() 'picCanvasの更新
gr.Dispose() 'オブジェクト解放
End Sub
H2の4 (だ円)
コード(プログラム) 追加部分のみ。
Private Sub btnDaen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnDaen.Click
'Graphicsオブジェクト作成
Dim gr As Graphics = Graphics.FromImage(picCanvas.Image)
'円、マゼンタ色
gr.DrawEllipse(Pens.Magenta, 0, 0, 150, 150)
'だ円、オリーブ色
gr.DrawEllipse(Pens.Olive, 20, 20, 250, 125)
picCanvas.Refresh() 'picCanvasの更新
gr.Dispose() 'オブジェクト解放
End Sub
H2の5 (塗りつぶし)
コード(プログラム) 追加部分のみす。
Private Sub btnFill_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnFill.Click
'Graphicsオブジェクト作成
Dim gr As Graphics = Graphics.FromImage(picCanvas.Image)
'塗りつぶしの四角形、チョコレート色
gr.FillRectangle(Brushes.Chocolate, 100, 100, 150, 80)
'だ円、シアン色
gr.FillEllipse(Brushes.Cyan, 50, 150, 120, 70)
picCanvas.Refresh() 'picCanvasの更新
gr.Dispose() 'オブジェクト解放
End Sub
H2の6 (文字)
コード(プログラム) 追加部分のみ。
Private Sub btnMoji_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnMoji.Click
'Graphicsオブジェクト作成
Dim gr As Graphics = Graphics.FromImage(picCanvas.Image)
'Fontオブジェクト作成
Dim gfont As New Font("MS 明朝", 12, FontStyle.Bold)
'文字描画 ↑”MS”は全角、”MS”と”明朝”の間は半角空白。
gr.DrawString("プログラミング実習", gfont, Brushes.Black, 20, 10)
picCanvas.Refresh() 'picCanvasの更新
gr.Dispose() 'オブジェクト解放
gfont.Dispose() 'オブジェクト解放
End Sub
プログラム終了時の「オブジェクト解放」の処理の追加
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)
Handles Me.FormClosing
gr.Dispose() 'オブジェクト解放
End Sub
/// 実習H2(節約バージョン) グラフィックス(1) | Copyright©2014 Hiroshi Masuda |