画像の合成をしています。
1回目は問題なく合成できました。
しかし、2回目は「GDI+ で汎用エラーが発生しました。」というエラーが発生してしまいます。
念のため、該当するファイルを削除しようとしたら、「vshost32.exeによってファイルは開かれているため、操作を完了できません。ファイルを閉じてから再実行してください。」というメッセージがでます。
このファイルを閉じる方法を教えてください。
1回目で合成した画像
2回目に合成しようとしたら、このエラーが出ました
該当ファイルを削除しようとしたら出たメッセージ
VB.NET
1FileName = DirName & "\" & System.IO.Path.GetFileNameWithoutExtension(TextBox3.Text) & ".jpg" 2Using Jpeg As Bitmap = FormUtil.CreateClientBitmap(Me, New Rectangle(709, 158, 435, 370)) 3 Jpeg.Save(FileName, Imaging.ImageFormat.Jpeg) 4 Dim g As Graphics = Graphics.FromImage(PictureBox2.Image) 5 Dim img As New Bitmap(FileName) 6 Dim srcRect As New Rectangle(0, 0, 435, 376) 7 Dim desRect As New Rectangle(TextBox13.Text, TextBox14.Text, 435 * (TextBox15.Text / 100), 376 * (TextBox15.Text / 100)) 8 '画像の一部を描画する 9 g.DrawImage(img, desRect, srcRect, GraphicsUnit.Pixel) 10 g.Dispose() 11 PictureBox2.Invalidate() 12 FileName = DirName & "\Test" & System.IO.Path.GetFileNameWithoutExtension(TextBox3.Text) & ".jpg" 13 PictureBox2.Image.Save(FileName, Imaging.ImageFormat.Jpeg) 14End Using
インターネットのサイトを探しましたが、思うようなサイトが見つかりません。
何方か、お力添えお願いします。
環境
Windows 10
Microsoft Visual Studio 2010
Dim img As New Bitmap(FileName)
が Dispose されていないですね
g.DrawImage(img, desRect, srcRect, GraphicsUnit.Pixel)
ここは Jpeg で良いのでは?
早速の回答、ありがとうございました。
img.Dispose()
で解決しました。
追加の質問で申し訳ありませんが、教えてください。
合成したときに直前の画像の上に上書きされてしまいます。
直前の画像データをクリアしてから合成することは可能でしょうか?
色々と甘えてしまい、申し訳ありませんがよろしくお願いします。
最初の背景画像を保存しておいて、再度合成すれば良いです。
PictureBox2.Image = DirectCast(BackBmp.Clone, Bitmap)
(合成処理)
Clone すると、リソースが増えるので、背景画像を描画したほうがいいですね。
ご指摘のように、一旦
PictureBox2.ImageLocation = Nothing
PictureBox2.ImageLocation = TextBox3.Text
として、合成処理をしましたが、
Dim g As Graphics = Graphics.FromImage(PictureBox2.Image)
のところで、「NULL値を入れることは出来ません」というメッセージがでました。
どのようにしたらPictureBox2に新しいソースを読み込むことができますか?
VB.NETを使い始めて間もないので、色々分からない事ばかりです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー