2012-03-07 106 views
3

尊敬的专家为什么我在保存图像得到一个错误的代码如下gdi +发生了一般性错误。而保存图像

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

+0

用了几个小时来追踪这个问题,结果我没有看到真正的信息。我的服务器有一个与上传有关的磁盘空间配额,图像无法保存,因此给我gdi +异常。 – 2013-07-11 06:18:47

回答

4

你应该注意到,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

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

但是,它也可能是您的objImgManager在保存图像之前将其放置在缓冲区。

Bitmap ImageBitmap = objImgManager.GetBitmapFromBytes(ImageData); 

您可以通过这样做,创建图像的副本解决这个问题:

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

此变通办法解决了我的GDI +通用错误问题,同时将TIFF转换为JPG。谢谢! – Tomino 2013-08-28 07:23:57

相关问题