Loading [MathJax]/jax/output/HTML-CSS/config.js

2019年8月7日水曜日

RotateFlipでGDI+汎用エラーが出た

rotateflipでGDI+汎用エラー

背景

画像を読み込み回転させる処理を作成していました。
このとき訳あって読み込んだ画像を即座に削除する必要がありました。
Dim stream As New FileStream(FileName, FileMode.Open, FileAccess.Read)
Dim img As Bitmap = Image.FromStream(stream)
stream.Close()
File.Delete(FileName)
img.RotateFilp(RotateFlipType.Rotate180FlipNone)
このようなコードを実行すると5行目で「GDI+ で汎用エラーが発生しました。」という例外が発生しました。

原因

「GDI+ で汎用エラーが発生しました。」は原因が掴みにくいのですが、どうやら3行目でFileStreamを閉じてしまうと画像の保存などが出来なくなるらしく、今回の画像が回転できないのもこれが原因でした。
参考:Image.Save()でのエラー

実施

自分の場合はFileStreamにこだわる必要は無かったため、以下のように書き換えて対処しました。
Dim img As Bitmap
Using tmp As New Bitmap(FileName)
 img = tmp.Clone()
End Using
File.Delete(FileName)
img.RotateFilp(RotateFlipType.Rotate180FlipNone)

0 件のコメント:

コメントを投稿