GDI+ 用这个“通用错误”折磨我

3

说实话,GDI+在ASP.Net中的运行情况到底怎么了?它以如此神秘的方式运作,而且错误描述非常晦涩:GDI+发生了通用错误。

哦,非常感谢,现在我完全知道出了什么问题了...并不是。

看看导致错误的代码,也许你可以帮助我吗?

var fileStream = fuImage.FileContent;
var imageStream = new MemoryStream();

imageStream.SetLength(fileStream.Length);
fileStream.Read(imageStream.GetBuffer(), 0, (int)fileStream.Length);

imageStream.Flush();
fileStream.Close();

using (var image = System.Drawing.Image.FromStream(imageStream))
{
    using (Bitmap bmp = new Bitmap(image.Width, image.Height))
    {
        using (Graphics gr = Graphics.FromImage(bmp))
        {
            gr.DrawImage(image, 0, 0);
            bmp.Save(path);
        }
    }
}

这实际上是我的代码的简化版本,但仍然会导致错误。fuImage是一个FileUpload控件(.NET Web Forms)。

如果您遇到此错误,请确保存在要保存文件的完整路径......否则您可能会收到此“一般性错误”消息。


您是否拥有在“路径”中写的权限?图片格式是什么? - Justin
是的,我之前(从ASP.Net)成功保存到了那个路径。导致错误的是一个JPEG文件。 - Mickel
如果您从位图而不是图像中获取图形对象会怎样? - mbeckish
@mbeckish 这实际上是 SO 上的一个打字错误。我已经编辑了代码,但它仍然无法工作。 - Mickel
1个回答

6

将文件复制到MemoryStream中并读取它。
来自FileUpload的流是不可寻址的,这会导致GDI+出现问题。


编辑了代码以将文件复制到MemoryStream中,但仍然出现相同的错误。除了我使用的方法之外,还有其他复制文件的方法吗?(请参见编辑后的代码) - Mickel
是的,我已经解决了。实际上上面的代码很好用,只是在这之前有一些代码删除了应该保存图像的目录(这是一个临时目录)。所以谢谢! - Mickel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接