マウスのドラッグで範囲を選択し画像を取得してPictureBox2 に表示 (SNo.095) 1.マウスのドラッグで選択範囲の四角形を描く 2.選択範囲内の画像を取得して他の PictureBox にファイルに保存できるように表示 |
|
使用コントロール | Button1 PictureBox1 PictureBox2 |
その他条件 | WindowsXP(Vista) Visual Basic 2005(VB2008) |
★ マウスのドラッグで範囲を選択し画像を取得して他のピクチャーボックスに表示
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load '画像ファイルを読み込みPictureBoxに表示 PictureBox1.Image = System.Drawing.Image.FromFile("..\..\test.bmp") End Sub Private sPos As MouseEventArgs 'マウスのドラッグの開始点 Private ePos As MouseEventArgs 'マウスのドラッグの終了点 Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown If e.Button = MouseButtons.Left Then '開始点の取得 sPos = e ePos = e End If End Sub Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove 'マウスのドラッグで線を引く If e.Button = MouseButtons.Left Then Dim g As Graphics = PictureBox1.CreateGraphics() Dim BPen As New Pen(Color.Black, 1) BPen.DashStyle = Drawing2D.DashStyle.Dash '描いたの一旦消す(VB6.0の XorPen の代り) # ここがこのサンプルのミソ PictureBox1.Refresh() '消える描画でドラッグ中の四角形を描く g.DrawRectangle(BPen, sPos.X, sPos.Y, ePos.X - sPos.X, ePos.Y - sPos.Y) ePos = e 'マウスポインターの移動終了点を取得 g.Dispose() End If End Sub Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp If e.Button = MouseButtons.Left Then PictureBox1.Refresh() '最後の四角形を削除 Dim g As Graphics = PictureBox1.CreateGraphics() Dim BPen As New Pen(Color.Black, 1) BPen.DashStyle = Drawing2D.DashStyle.Dash '範囲確定の四角形を描く g.DrawRectangle(BPen, sPos.X, sPos.Y, ePos.X - sPos.X, ePos.Y - sPos.Y) g.Dispose() '-------------- 指定範囲の画像取得部分 ----------------- '四角形の範囲の画像を取得 Dim rect As New Rectangle(sPos.X, sPos.Y, ePos.X - sPos.X, ePos.Y - sPos.Y) '選択範囲が異常の場合表示処理をしない If (ePos.X - sPos.X) < 2 Or (ePos.Y - sPos.Y) < 2 Then Exit Sub End If 'PictureBox2 のサイズを切り取った画像のサイズに合せる Dim g2 As Graphics 'コピー元の PictureBox を指定の事 Dim bmp As Bitmap = New Bitmap(PictureBox1.Image) With PictureBox2 .Image = New Bitmap(ePos.X - sPos.X, ePos.Y - sPos.Y) .SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize g2 = Graphics.FromImage(.Image) End With '取得した画像を PictureBox2 に表示 g2.DrawImage(bmp, 0, 0, rect, GraphicsUnit.Pixel) bmp.Dispose() g2.Dispose() End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 'PictureBox2 の画像をファイルに保存 'PictureBoxになにも表示していないと保存時エラーとなるのでチェック With PictureBox2 If Not (.Image Is Nothing) Then .Image.Save("..\test09.bmp", Imaging.ImageFormat.Jpeg) End If End With End Sub |
|
マウスのドラッグで選択範囲を描いてマウスを離した状態の実行図 次のマウスダウンで四角形は消えます。再度取得した時点で PictureBox2 の画像が入れ替わります。 勿論、取得した画像は、エラーが発生する事無く、保存できます。 尚、上記コードを試される場合は、必ずそのまま状態で試して動作確認後に改造するなり、変更するようにして下さい。 色々変更を加えてから動作がおかしいとかのメールや質問を頂いてもお答えする事はできません。 |