ファイルからビットマップ イメージを読み込んでいました。イメージを別のファイルに保存しようとすると、「GDI+ で一般的なエラーが発生しました」というエラーが表示されました。これは、ファイルが画像オブジェクトによってロックされているためだと思います。
わかりましたので、Image.Clone 関数を呼び出してみました。これでもファイルはロックされます。
うーん。次に、FileStream からビットマップ イメージを読み込んで、そのイメージをメモリに読み込んで、GDI+ がファイルをロックしないようにします。これは、メモリ不足の例外をスローする Image.GetThumbnailImage メソッドを使用してサムネイルを生成する必要があることを除いて、うまく機能します。どうやら、この例外を停止するにはストリームを開いたままにしておく必要がありますが、ストリームを開いたままにしておくと、ファイルはロックされたままになります。
だからその方法はダメ。最後に、ファイルのコピーを作成しました。これで、ファイルの 2 つのバージョンができました。1 C# プログラムでロックして操作できます。この別の元のファイルはロックされていないままで、変更を保存できます。これには、変更できないファイルのコピーを操作しているため、変更を保存した後でも変更を元に戻すことができるという利点があります。
確かに、2 つのバージョンのイメージ ファイルを持たなくても、これを達成するためのより良い方法があります。何か案は?