VB.NETお絵かきソフト

【画面作成】

PictureBox1MainMenu1 OpenFileDialog SaveFileDialogを配置する。

メニューは,     ファイル   色   線の太さ

            ├読み込み ├黒  ├1

            ├保存   └白  ├3

            └終了       └5         (MenuItem番号に注意)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


【画像の取扱方】

 VB.NETでは,完全なオブジェクト指向となり,VB6と画像の取扱いの考えが違う。VB6では,Picture1に線や四角を書くなど命令(メソッド)があったが,VB.NETにはない。

 VB.NETでは,「画用紙」はImage,「額」はPictureBoxであり「線引き道具」g.Graphics「ペン」Penであり「色」Colorcolorと独立したオブジェクトとなっている。これらを順番に準備しないとならない。(※ 高校生相手なので厳密な説明にはなっていません。)

 

【コード】<<ダウンロード>>

Public Class Form1

    Inherits System.Windows.Forms.Form

Windows フォーム デザイナで生成されたコード

    '変数やオブジェクトのひな形を準備

    Dim PDown As Boolean

    Dim ox, oy, pw As Integer

    Dim co As Color

    Dim img As Image

    Dim g As Graphics

    Dim p As Pen

    Dim b As Brush

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        '画用紙(透明)の準備(※後で,大きさが新しくなるかもしれない(動的)オブジェクトなので,新しく(New)する。)

        img = New Bitmap(PictureBox1.Width, PictureBox1.Height)

        'お絵かき道具(DrawLineなどの)の準備(※準備物は変化しない(静的)オブジェクトなので,新しく(New)しない)

        g = Graphics.FromImage(img)

        'ペン,ブラシの準備(※後で,大きさが新しくなるかもしれない(動的)オブジェクトなので,新しく(New)する。)

        pw = 1

        co = Color.Black

        p = New Pen(co, pw)

        b = Brushes.White

        '額縁(Picturebox)に画用紙を貼り付ける

        PictureBox1.Image = img

        '画用紙が透明(黒)では嫌なので,白で塗りつぶす。

        g.FillRectangle(b, 0, 0, PictureBox1.Width, PictureBox1.Height)

        'マウスのボタン判定のフラグをクリア

        PDown = False

    End Sub

    Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown

        '描画フラグON,座標記録

        PDown = True

        ox = e.X

        oy = e.Y

    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove

        If PDown Then

            'ラインを引く

            g.DrawLine(p, ox, oy, e.X, e.Y)

            'PictureBoxを再描画する

            PictureBox1.Invalidate()

            'いまのXY座標を保存

            ox = e.X : oy = e.Y

        End If

    End Sub

    Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp

        '描画フラグの解除

        PDown = False

    End Sub

    Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

        '画像の読み込み

        OpenFileDialog1.ShowDialog()

        '画像を表示する PictureBox1.Image.FromFile(OpenFileDialog1.FileName)はダメ

        Dim loadbmp As New Bitmap(OpenFileDialog1.FileName)

        g.DrawImage(loadbmp, 0, 0)

        'PictureBoxを再描画する

        PictureBox1.Invalidate()

        'リソースの解放

        loadbmp.Dispose()

    End Sub

    Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click

        '画像の保存(jpeg形式)

        SaveFileDialog1.ShowDialog()

        PictureBox1.Image.Save(SaveFileDialog1.FileName, Imaging.ImageFormat.Jpeg)

    End Sub

    Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click

        'アプリケーションの終了

        Application.Exit()

    End Sub

    Private Sub MenuItem6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem6.Click

        'ペンの色を黒に変更

        co = Color.Black

        p = New Pen(co, pw)

    End Sub

    Private Sub MenuItem7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem7.Click

        'ペンの色を白に変更

        co = Color.White

        p = New Pen(co, pw)

    End Sub

    Private Sub MenuItem8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem8.Click

        'ペンの太さを1に変更

        pw = 1

        p = New Pen(co, pw)

    End Sub

    Private Sub MenuItem9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem9.Click

        'ペンの太さを3に変更

        pw = 3

        p = New Pen(co, pw)

    End Sub

    Private Sub MenuItem10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem10.Click

        'ペンの太さを5に変更

        pw = 5

        p = New Pen(co, pw)

    End Sub

End Class

【発 展】

 色の種類や太さの段階を増やしてみよう。