gdi +中发生了一般错误。同时保存图像

时间:2012-03-07 10:26:32

标签: asp.net

亲爱的专家我在保存图片时遇到错误,代码如下

  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 +中发生了一般错误。

2 个答案:

答案 0 :(得分:4)

您应该注意到ASP.NET中没有正式支持GDI / GDI +(System.Drawing名称空间) - 请参阅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代码。

答案 1 :(得分:2)

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

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

Bitmap ImageBitmap = objImgManager.GetBitmapFromBytes(ImageData);

您可以通过以下方式创建图像副本来解决此问题:

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