我的应用程序中的图片框控件中显示了一个图像。现在,我希望在我的应用程序运行时更新该Image,并且应用程序已经使用了该图像。
我使用代码这一行来更新我的徽标图片:更新代码
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+.
因此,请建议我如何在运行时更改我的图像或为我提供此异常的解决方案。
答案 0 :(得分: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);
您可以找到更多info in this SO question.