3.マウスのドラッグで範囲を選択し画像を取得して他のピクチャーボックスに表示(31_Gra_03) (旧、SampleNo.095) |
1.マウスのドラッグで範囲を選択し画像を取得して他のピクチャーボックスに表示 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :追加なし 参照設定:追加なし その他 :こちらには画像の加工・画像の描画が主体となるサンプルを掲載しております、画像の表示が主体となるサンプルは、 :PictureBox コントロールの方に掲載しておりますのでそちらをご覧下さい。 このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.マウスのドラッグで範囲を選択し画像を取得して他のピクチャーボックスに表示 |
起動時にでも適当な画像を PictureBox に表示しておいて下さい。 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load '画像ファイルを読み込みPictureBoxに表示 PictureBox1.Image = System.Drawing.Image.FromFile("..\..\..\data_pic\test.jpg") End Sub Private sPos As MouseEventArgs 'マウスのドラッグの開始点 Private ePos As MouseEventArgs 'マウスのドラッグの終了点 Private Sub PictureBox1_MouseDown(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseDown If e.Button = System.Windows.Forms.MouseButtons.Left Then '開始点の取得 sPos = e ePos = e End If End Sub Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove 'マウスのドラッグで線を引く If e.Button = System.Windows.Forms.MouseButtons.Left Then Using g As Graphics = PictureBox1.CreateGraphics() Using BPen As New Pen(Color.Red, 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 'マウスポインターの移動終了点を取得 End Using End Using End If End Sub Private Sub PictureBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp If e.Button = System.Windows.Forms.MouseButtons.Left Then PictureBox1.Refresh() '最後の四角形を削除 Using g As Graphics = PictureBox1.CreateGraphics() Using BPen As New Pen(Color.Red, 1) BPen.DashStyle = Drawing2D.DashStyle.Dash '範囲確定の四角形を描く g.DrawRectangle(BPen, sPos.X, sPos.Y, ePos.X - sPos.X, ePos.Y - sPos.Y) End Using End Using '-------------- 指定範囲の画像取得部分 ----------------- '四角形の範囲の画像を取得 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 のサイズを切り取った画像のサイズに合せる With PictureBox2 .Image = New Bitmap(ePos.X - sPos.X, ePos.Y - sPos.Y) .SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize End With Using g2 As Graphics = Graphics.FromImage(PictureBox2.Image) 'コピー元の PictureBox を指定の事 Using bmp As Bitmap = New Bitmap(PictureBox1.Image) '取得した画像を PictureBox2 に表示 g2.DrawImage(bmp, 0, 0, rect, GraphicsUnit.Pixel) End Using End Using End If End Sub Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 'PictureBox2 の画像をファイルに保存 'PictureBoxになにも表示していないと保存時エラーとなるのでチェック With PictureBox2 If Not (.Image Is Nothing) Then .Image.Save("saveTest.bmp", Imaging.ImageFormat.Jpeg) End If End With End Sub 図1.上記実行結果 マウスのドラッグで選択範囲を描いてマウスを離した状態の実行図です。 次のマウスダウンで四角形は消えます。再度取得した時点で PictureBox2 の画像が入れ替わります。 勿論、取得した画像は、エラーが発生する事無く、保存できます。 尚、上記コードを試される場合は、必ずそのまま状態で試して動作確認後に改造するなり、変更するようにして下さい。 2.PictureBoxに文字と画像を描画してファイルに保存(エラー回避)でのテスト結果でも解るように、保存や描画が絡むと思わむエラーが発生したり、問題が出てくる事がありますので、仕様に合った操作をするようにして下さい。 |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |