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.上記実行結果 |
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. |
検索キーワード及びサンプルコードの別名(機能名) |