保存JPG文件,GDI +中发生一般错误

时间:2014-06-16 08:45:07

标签: c# .net gdi+ bmp

我正在尝试保存JPEG图像,我收到错误:" GDI +中发生了一般错误"
我尝试了以下代码:

Bitmap b = new Bitmap(m_image.Width, m_image.Height);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

g.DrawImage(m_image, 0, 0, m_image.Width, m_image.Height);
g.Dispose();

Image img1 = (Image)b;
img1.Save(Filename, ImageFormat.Jpeg);
m_image.Save(Filename, ImageFormat.Jpeg);

m_image.save(filename, ImaheFormat.Jpeg);

2 个答案:

答案 0 :(得分:2)

根据Image.FromFile的MSDN文档,此方法会锁定文件。

  

文件保持锁定状态,直到图像被丢弃。

所以如果你使用这样的东西

var image = Image.Load(fileName);
// ...
image.Save(fileName)

它会抛出异常,因为文件仍然被锁定。

您可以通过不使用此方法加载图像来解决此问题,而是使用其中一个带有Stream参数的重载:

Image image;
using (var stream = File.OpenRead(fileName))
{
    image = Image.FromStream(stream);
}
// ...
image.Save(fileName);

使用上面的代码我没有任何问题,但Image.FromStream的文档说明了

  

您必须在图像的生命周期内保持流打开。

如果您遇到任何问题,可以将文件加载到MemoryStream并保持打开状态。

答案 1 :(得分:0)

更改保存文件 假设 Filename =“c:\ 1.jpg”;

img1.Save(“c:\ 2.jpg”,ImageFormat.Jpeg); m_image.Save(“c:\ 3.jpg”,ImageFormat.Jpeg); 确保你有写权限。

我有以下示例运行完美

 Image m_image = Image.FromFile(Filename);
            Bitmap b = new Bitmap(m_image.Width, m_image.Height);
            Graphics g = Graphics.FromImage((Image)b);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;

            g.DrawImage(m_image, 0, 0, m_image.Width, m_image.Height);

            Image img1 = (Image)b;
            img1.Save("C:\\1.jpg", ImageFormat.Jpeg);
            m_image.Save("C:\\2.jpg", ImageFormat.Jpeg);