0

我可以无限保存我的文件。我可以无限打开我的文件。我可以保存然后打开我的文件。

但是,打开文件后我无法保存文件。我收到以下错误:

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);
            }

        }
4

1 回答 1

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);
于 2013-05-09T17:49:19.660 回答