2009-11-02 45 views
0

我试图“重新保存”一个图像,并得到错误“GDI +中发生了一般性错误”。我已经做了一些搜索这个错误,但还没有找到解决方案!大部分的建议提到:“在GDI +中发生了一般性错误”保存

  • 检查该流不使用或锁定(即文件流)
  • 确保流未设置为对象的生命周期(不应该因为你见下文)
  • 试图将位图对象中复制的对象,并用它来保存(没有为我工作)

我正在使用的代码如下:

using (Stream @imageStream = ResourceManager.CreateFile(finalResourceId, imageFileName)) 
{ 
    using (MemoryStream ms = new MemoryStream(imageFile.ResourceObject)) 
    { 
     using (Image img = Image.FromStream(ms)) 
     { 
      imageWidth = img.Width; 
      imageHeight = img.Height; 
      img.Save(@imageStream, img.RawFormat); 
     } 
    } 
} 

在上面的代码中,ResourceManager.CreateFile返回相当于MemoryStream,因此不应该有任何“资源问题”。

我不假设其他人遇到过这个问题,并且能够分享他们的解决方案吗?在此先感谢您的帮助!

+0

只要你知道,你可以结合那些使用语句。 – 2009-11-02 04:04:27

+0

有你要保存的文件夹获得ASPNET_MACHINE和NETWORKSERVICE写入权限? – Scozzard 2009-11-02 04:10:50

+0

嗨,感谢您对使用陈述的建议。 至于权限查询 - 这些不应该发挥作用,因为我没有写入文件系统,而是将所有内容都保存在内存中。 – 2009-11-02 04:13:22

回答

1

感谢@Scozzard提示我想出一个解决方法!

int imageWidth, imageHeight; 
using (Stream imageStream = ResourceManager.CreateFile(finalResourceId, imageFileName)) 
{ 
    using (Image img = Image.FromStream(new MemoryStream(imageFile.ResourceObject))) 
    { 
     imageWidth = img.Width; 
     imageHeight = img.Height; 
    } 
    imageStream.Write(imageFile.ResourceObject, 0, imageFile.ResourceObject.Length); 
} 

因为我完全在内存中工作,我并不真的需要使用图像对象重新保存它,因为它是在同一图像格式 - 我可以只字节缓冲区复制到新的流。

感谢您的意见!

+0

哈哈不用担心 - 不错的工作! – Scozzard 2009-11-02 04:22:09

相关问题