2015年9月5日土曜日

VB 表示した画像ファイルの上書き保存

VB でプログラミングしていて、ファイルから画像を表示確認の上、変更し上書き保存のケース ってありますよね。
嵌りました。
GDI+ で ... の エラー メッセージ と ご対面。
なんじゃ、こりゃ?。


今迄、画像をハンドリングしても、上書き保存のケースは皆無でした。
餅は餅屋で、 画像編集ソフトの出番だったのです。
でも、出会ってしまいました。  このエラー!。
     GDI+ で汎用エラーが発生しました。

きっと、あまり、再び、出会う機会も少ない、 つまり、次には、忘れているでしょうから、書き残して置きましょう。


もう一回、書いて置きます。


ファイルから画像を表示確認の上、変更し上書き保存のケース。

例えば、 Me.PictureBox1.Image = Image.FromFile(fn)     fn はファイル名。
そして、(別の) Me.PictureBox2.Image.Save(fn, System.Drawing.Imaging.ImageFormat.Jpeg)
これは 駄目! です。


fn がオープンされていて、セーブ出来ません。


対処方法は、 こう です。
ファイルを直接 PictureBox に割り当てず、Bitmap として展開して、さっさと閉じてしまう事です。

            Dim fn As String = "ほにゃらら.jpg"
            Dim fs As IO.FileStream
            fs = New IO.FileStream(fn, IO.FileMode.Open, IO.FileAccess.Read)
            Dim bmp As Bitmap = Bitmap.FromStream(fs)
            fs.Close()
            fs.Dispose()
            Me.PictureBox1.Image = New Bitmap(bmp)
            bmp.Dispose()

            'Me.PictureBox1.Image = Image.FromFile(fn)
            'Image.FromFile で開くと、Image.Save で GDI+ が Error を吐く

                           後始末がいい加減なコードかも?。
                           保存側は弄る必要はありません。

きっと、次には 忘れていますよ。  きっと。



0 件のコメント:

コメントを投稿