投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/6/5 08:13:12
> 確かに、ストリーム.close をしなければエラーは出なくなりました

先に述べた理由があるため、元のストリームを閉じてはいけません。

特に、アニメーション GIF やマルチページ TIFF の場合、元ストリームが閉じていると、
PictureBox に表示させたタイミングや、SelectActiveFrame の呼び出しなどによって
エラーが引き起こされることがあります。


> ただ、画像を読み込む、あとで書き込む ということをするために
> ストリーム.close をしないと書き込めませんので

閉じるべきは「ストリーム」であって、「ファイル」ではありませんよ。
FileStream のかわりに MemoryStream を使うようにしてみてください。
たとえば、元ファイルを Byte 配列として読み込まれてすぐに閉じておき、
それを MemoryStream に引き渡すようにします。

Dim ms As New MemoryStream(File.ReadAllBytes(ファイルパス))

これならば、元のファイルを長期間ロックすることなく、Image.FromStream 用のストリームを調達することが出来るかと思います。

ただしこの方法をとる場合も、Image.FromStream した後は、Image が解放されるまで
ms.Dispose() しないようにします。(Image が Dispose されれば、元リソースも処分されるので
どちらにしてもストリームを明示的に処分する必要はありません)