PictureBoxに文字を描画してファイルに保存(画像を加工して保存) (2個) (SNo.094) 1.PictureBoxに文字を描画してファイルに保存(間違った操作) 2.PictureBoxに文字を描画してファイルに保存(正しい操作) |
|
使用コントロール | Button1 〜 Button6 PictureBox1 PictureBox2 |
その他条件 | WindowsXP(Vista) Visual Basic 2005(VB2008) |
1.PictureBoxに文字を描画してファイルに保存(間違った操作)
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click '消えない描画で文字とラインを描く Dim g As Graphics With PictureBox1 .Image = New Bitmap(150, 50) g = Graphics.FromImage(.Image) End With '------------- 以下の部分は同じです ---------------------------- Dim f As New Font("MS Pゴシック", 14) g.DrawString("花ちゃん", f, Brushes.Blue, 10, 10) g.DrawLine(Pens.Black, 0, 40, 100, 40) f.Dispose() g.Dispose() 'この画像を保存して、再度読込み表示するとバックが青くなっている End Sub 描いたものを一旦ファイルに保存します Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click 'PictureBox の Image をファイルに保存 '表示した画像を保存して、消去 With PictureBox1 If Not (.Image Is Nothing) Then .Image.Save("..\test94.bmp", Imaging.ImageFormat.Bmp) .Image.Dispose() .Image = Nothing End If End With End Sub 保存したファイルを読み込んで表示するとバックが青くなっている Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click With PictureBox1 .SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize '画像ファイルを読み込みPictureBoxに表示 .Image = System.Drawing.Image.FromFile("..\test94.bmp") 'このように読込んで表示し、その後保存すると下記のエラーが発生する '(ロックされないように読み込んでも同じです) End With ''System.Runtime.InteropServices.ExternalException' 'のハンドルされていない例外が system.drawing.dll で発生しました。 '追加情報 : GDI+ で一般的なエラーが発生しました。 End Sub |
|
2.PictureBoxに文字を描画してファイルに保存(正しい操作) Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click Dim g As Graphics With PictureBox2 .Image = New Bitmap(150, 50) g = Graphics.FromImage(.Image) 'バックのカラーをPictureBox2.BackColor と '同じに設定(印刷する場合は白色等に設定) 'g.Clear(Color.White) 'この部分を追加 g.Clear(.BackColor) 'この部分を追加 End With '------------- 以下の部分は同じです ---------------------------- Dim f As New Font("MS Pゴシック", 14) g.DrawString("花ちゃん", f, Brushes.Blue, 10, 10) g.DrawLine(Pens.Black, 0, 40, 100, 40) f.Dispose() g.Dispose() End Sub Private Sub Button5_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button5.Click 'PictureBox の Image をファイルに保存(この処理は Button2 と同じです) With PictureBox2 If Not (.Image Is Nothing) Then .Image.Save("..\test99.bmp", Imaging.ImageFormat.Bmp) End If '表示した画像を消去 If Not (.Image Is Nothing) Then .Image.Dispose() .Image = Nothing End If End With End Sub Private Sub Button6_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button6.Click '消えない画像表示のところで紹介したコードをそのまま使って表示 Dim g As Graphics With PictureBox2 .SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize .Image = New Bitmap(.Size.Width, .Size.Height) g = Graphics.FromImage(.Image) End With '------------- 以下の部分は同じです ---------------------------- Dim bmap As Bitmap = New Bitmap("..\test99.bmp") g.DrawImage(bmap, 0, 0) bmap.Dispose() g.Dispose() End Sub |
|
掲示板で質問があって作成したものです。 必ず、Button1 〜 Button6 迄のコードを試して、見比べて下さい。 VB6.0 のように Picture1.AutoRedraw = True のような機能はありません。 書き方によっては、画像が消えたり、保存ができない。又、保存ができてもバックが青くなる等、それに加工したファイルを保存しようとすると GDI+ で一般的なエラーが発生しました。のエラーが発生したりと色々問題が発生するようです。 尚、PictureBox1.BackColor = Color.White のような事では背景が描画されません。(保存したファイルには) 保存時にエラーが発生するのは、読込時にファイルをロックして読み込む事とは関係がありません、ロックを外して読み込んでも同じくエラーは発生します。 |