質問
こんにちは。基本的な画像エディタプログラムでビットマップ画像を保存しようとしています。
コードは次のとおりです。
// then save it
ImageBoxInApp.Image.Save(filename);
[編集] そしてこれで画像を開きます
openFileDialog1.Title = "Select an Image";
openFileDialog1.Filter = "All Files|*.*|Windows Bitmaps|*.bmp|JPEG Files|*.jpg";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
filename = openFileDialog1.FileName;
Image img = System.Drawing.Image.FromFile(filename);
これを試すと、 Generic GDI + error
を受け取ります。そのため、これに対する解決策を見つけましたが、次のようになります。
// Delete existing file first
System.IO.File.Delete(filename);
// then save it
ImageBoxInApp.Image.Save(filename);
しかし、これを行おうとすると、削除しようとしているファイルが現在開いているという別のエラーを受け取ります。これは、編集しようとしているファイルだからです。
「閉じる」方法は?実際にアプリケーションを閉じずにファイルを使用しますか?または、代替ソリューションはありますか?
ありがとう!
解決
ファイルのロード方法に関するコンテキストを見ずに言うのは難しいですが、ここにいくつかの提案があります:
- 保存する前に、既存の画像を新しい画像にコピーし、元の画像を閉じて、削除を実行し、コピーを保存します。
- ファイルをランダムなファイル名で保存し、元のファイルを削除し、ランダムな名前のファイルの名前を元の名前に変更します。
- ファイルをメモリストリームにロードし、メモリ内コピーを使用してイメージを初期化します。
私はほとんどの場合、個人的にオプション3を使用します。画像を使い終わったら、必ず破棄してください-using()ブロックでラップできるのが最善です。
所属していません StackOverflow