繁体   English   中英

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

[英]Save the JPG file, A generic error occurred in GDI+

我正在尝试保存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);

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

该文件将保持锁定,直到处理完映像为止。

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

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并保持打开状态。

假设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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM