4

が同じものを表示している間に、画像ファイルが既に存在する場合は削除する(上書きする)必要がありますPictureBox。ただし、ファイルを削除しようとすると、によってブロックされPictureBoxます。そこで、次のコードを書きます。

if (File.Exists(file))
{
   Image _tmp = (Image)current_pic.Image.Clone();                 
   current_pic.Image.Dispose();
   current_pic.Dispose();
   File.Delete(path);
   current_pic.Image = _tmp;
   current_pic.Image.Save(file, ImageFormat.Jpeg);
}
else
   current_pic.Image.Save(file, ImageFormat.Jpeg); 

のおかげでファイルシステム上のイメージは削除されますpic.Dispose()が、イメージは の中に表示されなくなりPictureBoxます。多分Dispose()メソッドは無効になりPictureBoxますか?

4

1 に答える 1

4

以下に示すように、画像をロックせずに画像ボックスに読み込むことができます。

Image img;
string file = @"d:\a.jpg";
using (Bitmap bmp = new Bitmap(file))
{
   img = new Bitmap(bmp);
   current_pic.Image = img;
}
if (File.Exists(file))
{
    File.Delete(file);
    current_pic.Image.Save(file, ImageFormat.Jpeg);
}
else
    current_pic.Image.Save(file, ImageFormat.Jpeg);

保存操作もサポートするようにコードを更新しました。

以前のコードでは、画像をリンクした後でも削除がサポートされていました。ストリームが閉じられ、保存中に GDI+ エラーが発生しました。

新しく更新されたコードは、次のようにすべての要件を満たしています

  • 画像のリンク中にファイルの削除を許可する
  • Picturebox コントロールの Image プロパティを使用した画像の保存
于 2013-04-17T19:12:04.053 に答える