VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

メニューへ戻ります。 描画・画像関係のメニュー
1.直線・四角形・楕円・多角形形(星形)を描画及び消去
2.PictureBoxに文字と画像を描画してファイルに保存(エラー回避)
3.マウスのドラッグで範囲を選択し画像を取得して他のピクチャーボックスに表示
4.PictureBox に表示した画像の閉じた領域内をペイントの塗潰しのように塗潰す
5.
6.
7.
8.
9.
10.
11.
12.
 .
20.その他、当サイト内に掲載の描画・画像に関するサンプル


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.上記実行結果
 vb2013graphics03_01
マウスのドラッグで選択範囲を描いてマウスを離した状態の実行図です。
次のマウスダウンで四角形は消えます。再度取得した時点で PictureBox2 の画像が入れ替わります。
勿論、取得した画像は、エラーが発生する事無く、保存できます。

尚、上記コードを試される場合は、必ずそのまま状態で試して動作確認後に改造するなり、変更するようにして下さい。
2.PictureBoxに文字と画像を描画してファイルに保存(エラー回避)でのテスト結果でも解るように、保存や描画が絡むと思わむエラーが発生したり、問題が出てくる事がありますので、仕様に合った操作をするようにして下さい。

このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)





このページのトップへ移動します。