【问题标题】:a generic error occurred in gdi+. while saving an imagegdi+ 中出现一般错误。保存图像时
【发布时间】:2012-03-07 10:26:31
【问题描述】:

尊敬的专家,我在保存图像时遇到错误,代码如下

  ClsImageManager objImgManager = new ClsImageManager();
  Bitmap ImageBitmap = objImgManager.GetBitmapFromBytes(ImageData);
  Response.ContentType = "image/tiff";
  ImageBitmap.Save(Response.OutputStream, ImageFormat.Tiff);
  ImageBitmap.Dispose();
  Response.End();

当我使用 Image.format.jpeg 时,代码运行良好,但当我将其更改为 ImageFormat.Tiff 时,我收到错误 gdi+ 中发生一般错误。

【问题讨论】:

  • 花了几个小时追踪这个问题,结果我没有看到真正的信息。我的服务器有一个与上传有关的磁盘空间配额,并且图像无法保存,因此给了我 gdi+ 异常。

标签: asp.net


【解决方案1】:

您应该注意 GDI/GDI+(System.Drawing 命名空间)在 ASP.NET 中不受官方支持 - 请参阅 http://msdn.microsoft.com/en-us/library/system.drawing.aspx 中的“警告”。
应该使用 WIC 代替 GDI+(请参阅 http://weblogs.asp.net/bleroy/archive/2009/12/10/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi.aspx

据说,很多人已经在 ASP.NET 中成功使用了 GDI+。最有可能的是,您应该尝试将图像保存到内存流(或文件中),然后将保存的图像写入响应。详情见此链接:http://www.west-wind.com/weblog/posts/2006/Oct/19/Common-Problems-with-rendering-Bitmaps-into-ASPNET-OutputStream

另一种解决方法可能与用户帐户有关。显然,GDI/GDI+ 绑定到设备上下文(屏幕、打印机等),它们可能在服务帐户下不可用。因此,如果有帮助,您可以尝试在一些普通用户帐户上运行 ASP.NET 代码。

【讨论】:

    【解决方案2】:

    您可能需要尝试显式编码图像保存。
    查看 Image.Save 上此 MSDN 文档底部的代码示例
    Image.Save Method (String, ImageCodecInfo, EncoderParameters)
    可以将相同的操作应用于您的保存。

    但是,也可能是您的 objImgManager 在您保存图像之前正在处理存储图像的缓冲区。

    Bitmap ImageBitmap = objImgManager.GetBitmapFromBytes(ImageData);
    

    您可以通过执行以下操作创建图像副本来解决此问题:

    Bitmap ImageBitmap = new Bitmap(objImgManager.GetBitmapFromBytes(ImageData));
    

    【讨论】:

    • 此解决方法解决了我在将 TIFF 转换为 JPG 时的 GDI+ 通用错误问题。谢谢!
    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多