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

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


2.PictureBoxに文字と画像を描画してファイルに保存(エラー回避)(31_Gra_02) (旧、SampleNo.094)
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.間違った操作方法でのテスト
表示・描画だけなら問題がなくても。保存が絡むとエラーが表示されたり、描画した通りに保存されなかったりと、色々問題が発生するのでそれらのテストを行っております。

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
'消えない描画
    Dim bmp As Bitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)
    Using g As Graphics = Graphics.FromImage(bmp)
        Using f As New Font("MS Pゴシック", 14)
            g.DrawString("花ちゃん", f, Brushes.Blue, 10, 10)
            g.DrawLine(Pens.Black, 0, 40, 100, 40)
        End Using
    End Using
    PictureBox1.Image = bmp
    'この画像を保存して、再度読込み表示するとバックが青くなってい
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'PictureBox の Image をファイルに保存
    '表示した画像を保存して、消去
    With PictureBox1
        If Not (.Image Is Nothing) Then
            .Image.Save("saveTest.bmp", Imaging.ImageFormat.Bmp)
        End If
    End With
    'PictureBox コントロールに関するワンポイントテクニック集の3.PictureBox 内に表示した Image を消去する より
    Call sChangeImage(PictureBox1)
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    With PictureBox1
        .SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
        '画像ファイルを読み込みPictureBoxに表示
        .Image = System.Drawing.Image.FromFile("saveTest.bmp")
        'このように読込んで表示し、その後保存すると下記のエラーが発生する
    End With

'System.Runtime.InteropServices.ExternalException'
'のハンドルされていない例外が system.drawing.dll で発生しました。

'又、こちらの画像は、消去してからでないと削除できません。

'追加情報 : GDI+ で一般的なエラーが発生しました。
End Sub


Public Shared Sub sChangeImage(myPictureBox As PictureBox, Optional newImage As Image = Nothing)
    With myPictureBox
        .SizeMode = PictureBoxSizeMode.AutoSize
        Dim oldImage As Image = .Image
        If Not (oldImage Is Nothing) Then
            .Image = newImage
            oldImage.Dispose()
            oldImage = Nothing
        Else
            .Image = newImage
        End If
    End With
End Sub

 図1.上記実行結果
 vb2013graphics02_01

このページのトップへ移動します。 2.正しい操作方法でのテスト
表示・描画だけなら問題がなくても。保存が絡むとエラーが表示されたり、描画した通りに保存されなかったりと、色々問題が発生するのでそれらのテストを行っております。

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Dim bmp As Bitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)
    Using g As Graphics = Graphics.FromImage(bmp)
      'バックのカラーをPictureBox2.BackColor と
      '同じに設定(印刷する場合は白色等に設定)
      'g.Clear(Color.White)    'この部分を追加
      g.Clear(PictureBox2.BackColor)       'この部分を追加
        Using f As New Font("MS Pゴシック", 14)
            g.DrawString("花ちゃん", f, Brushes.Blue, 10, 10)
            g.DrawLine(Pens.Black, 0, 40, 100, 40)
        End Using
    End Using
    PictureBox2.Image = bmp
End Sub

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    '表示した画像を保存して、消去
    With PictureBox2
        If Not (.Image Is Nothing) Then
            .Image.Save("saveTest1.bmp", Imaging.ImageFormat.Bmp)
        End If
    End With
    'PictureBox コントロールに関するワンポイントテクニック集の3.PictureBox 内に表示した Image を消去する より
    Call sChangeImage(PictureBox2)
End Sub

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    With PictureBox2
        .Image = New Bitmap(.Size.Width, .Size.Height)
        .SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
    End With
    Using g As Graphics = Graphics.FromImage(PictureBox2.Image)
        Using bmap As Bitmap = New Bitmap("saveTest1.bmp")
            g.DrawImage(bmap, 0, 0)
        End Using
    End Using
End Sub

これらのコードは、実際に自分で動かして見て違いなどを確認して見て下さい。

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


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


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


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


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





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