我可以无限制地保存我的文件。我可以无限地打开我的文件。我可以保存然后打开我的文件。
但是打开后我无法保存文件。我收到以下错误:
System.Drawing.dll中出现'System.Runtime.InteropServices.ExternalException'类型的第一次机会异常
其他信息:GDI +中发生了一般性错误。
我尝试了处理和临时位图,但这似乎对我不起作用。文件打开和保存的位置也是同一个地方,所以也许问题可能是覆盖文件?我的程序总是在temp.save中断开
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
//Graphics.FromImage(bmap).Dispose();
using (Graphics g = Graphics.FromImage(bmap))
{
bmap = new Bitmap(@"C:\Users\Nick\final.bmp");
g.DrawImage(bmap, panel1.Width, panel1.Height);
}
panel1.Invalidate();
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
Graphics g = Graphics.FromImage(bmap);
temp =new Bitmap(bmap);
//Graphics.FromImage(bmap).Dispose();
try
{
g.Dispose();
temp.Save(@"C:\Users\Nick\final.bmp", ImageFormat.Bmp);
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine(ex.Message); ;
}
catch (System.Runtime.InteropServices.ExternalException ex)
{
Console.WriteLine(ex.Message);
}
}
答案 0 :(得分:1)
您无法覆盖该文件,因为当您使用new Bitmap(path)
时,该文件将被加载到内存中并保持打开状态直到您完成它为止,如果文件当前打开,则无法覆盖该文件
修改强> 的
以下是从内存流加载图像的方法:
// make sure you don't dispose of this until you're done with it
var memoryStream = new MemoryStream(File.ReadAllBytes(path));
Image img = Image.FromStream(memoryStream);