1

アプリケーションの画像ボックスコントロールに1つの画像を表示しています。ここで、アプリケーションが実行されていて、イメージがアプリケーションによってすでに使用されているときに、そのイメージを更新したいと思います。

このコード行を使用して、ロゴ画像を更新しました:UPDATED CODE

  public void showRow()
  {
      string _fileName = Application.StartupPath + "\\Logo" + ".png";

      using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read))
      {
          var img = Image.FromStream(stream);
          pbStoreLogo.Image = img;
      }
  }

  private void btnsave_Click(object sender, EventArgs e)
  {
      using (var m = new MemoryStream())
      {
          pbStoreLogo.Image.Save(m,System.Drawing.Imaging.ImageFormat.Png);
          var img = Image.FromStream(m);
          img.Save(Application.StartupPath + "\\Logo" + ".png");
      }
  }

そしてそれは例外を通して:A generic error occurred in GDI+.

したがって、実行時にイメージを変更する方法を提案するか、この例外の解決策を提供してください。

4

1 に答える 1

1

アプリケーションからファイルシステムの物理パスにオブジェクトを保存するImageには、ファイルがアプリケーションまたは他のアプリケーションによって使用されていないことを確認する必要があります。したがって、ファイルの保存方法だけでなく、画像を画像ボックスに読み取る方法にも注意する必要があります。

物理リソースを解放するには、ファイルをストリームに読み込んでから、ストリームから画像を作成してから、画像を画像ボックスに割り当てる必要があります。このような:

string _fileName = Application.StartupPath + "\\Logo" + ".png";

using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read))
{
    var img = Image.FromStream(stream);
    pbStoreLogo.Image = img;
}

そして保存しながら:

using (var m = new MemoryStream())
{
    pbStoreLogo.Image.Save(m, ImageFormat.Png);
    var img = Image.FromStream(m);
    img.Save(_fileName);
}

プロジェクトにリソースファイルとしてファイルがある場合、これらの面倒なことはすべてそこにあるべきではありません。あなたはただすることができます:

pbStoreLogo.Image = Properties.Resources.Image1;

pbStoreLogo.Image.Save(_fileName);

このSOの質問で詳細を見つけることができます。

于 2012-10-30T15:21:53.830 に答える