【问题标题】:ASP.NET error on Bitmap.Save "Exception (0x80004005): A generic error occurred in GDI+."Bitmap.Save 上的 ASP.NET 错误“异常 (0x80004005):GDI+ 中发生一般错误。”
【发布时间】:2011-01-26 17:47:23
【问题描述】:

我有一个函数,它首先从磁盘读取图像,调整大小,然后保存到另一个目录。

当我使用 Bitmap.Save(directory + theimagename) 时,它会返回我在问题标题中所述的错误。

我检查了目录是否正确,并且该目录中不存在给定的图像名称。

奇怪的是,相同的代码在本地机器上运行良好。但是当我将它上传到我的共享托管空间时,它就不起作用了。

代码如下。

bmpOut = new Bitmap(Size, Size);
Graphics g = Graphics.FromImage(bmpOut);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.FillRectangle(Brushes.White, 0, 0, Size, Size);
int topBottomPadding = 0; int leftRightPadding = 0;
if (Size > lnNewWidth + 1)
    leftRightPadding = Convert.ToInt32((Size - lnNewWidth) / 2);
else if (Size > lnNewHeight + 1)
    topBottomPadding = Convert.ToInt32((Size - lnNewHeight) / 2);
g.DrawImage(loBMP, leftRightPadding, topBottomPadding, lnNewWidth, lnNewHeight);
Bitmap bmp = new Bitmap(bmpOut);
if (bmp != null)
    bmp.Save(ResizedOutput); // C:\Inetpub\vhosts\DomainName\httpdocs\ProductImages\500px\gigabyte_ga_ep45_ds4_profilelarge[1].jpg
bmp.Dispose();
bmpOut.Dispose();
g.Dispose();
loBMP.Dispose();

堆栈跟踪:

[ExternalException (0x80004005): A generic error occurred in GDI+.]
   System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) +377630
   System.Drawing.Image.Save(String filename, ImageFormat format) +69
   System.Drawing.Image.Save(String filename) +25
   Utilities.ResizeImage(String fileName, String mode) in c:\inetpub\vhosts\batuhanakcay.com\httpdocs\App_Code\Utilities.cs:181
   Link.ToProductImage(String fileName) in c:\inetpub\vhosts\batuhanakcay.com\httpdocs\App_Code\Link.cs:79
   Product.PopulateControls(ProductDetails pd) in c:\inetpub\vhosts\batuhanakcay.com\httpdocs\Product.aspx.cs:37
   Product.Page_Load(Object sender, EventArgs e) in c:\inetpub\vhosts\batuhanakcay.com\httpdocs\Product.aspx.cs:20

【问题讨论】:

    标签: c# asp.net bitmap drawing gdi+


    【解决方案1】:

    来自ASP Net - GDI+ and SAVE JPG or BMP on the server

    99.9% 的情况下,在使用 GDI 时,“发生一般错误”意味着 您尝试保存到的目录 没有适当的权限。 通常,您需要确保 目录允许 ASP.NET 修改文件。

    你检查权限了吗?

    【讨论】:

    • 我真是太傻了,我已经研究了 2 天的代码,试图找出到底是哪里出了问题。你是对的,它必须是我检查的第一件事。我只是给用户“Plesk IIS WP User (IWAM_plesk(default))”完全权限,它正在工作。谢谢。
    • SO 本来就是你的第二双眼睛 X-)
    • 我如何检查这个?
    • 我已通过在使用 GDI+ 生成的 Picturebox 控件中处理图像来修复该错误。
    【解决方案2】:

    当您尝试在网络共享上保存时也会出现此错误。解决此问题的唯一解决方案是将您的位图移动到内存流中,并将其与文件流一起保存到网络共享中。

    这是一个可以轻松解决此问题的扩展方法:

    public static void SaveOnNetworkShare(this System.Drawing.Image aImage, string aFilename, 
      System.Drawing.Imaging.ImageFormat aImageFormat)
    {
      using (System.IO.MemoryStream lMemoryStream = new System.IO.MemoryStream())
      {
        aImage.Save(lMemoryStream, aImageFormat);
    
        using (System.IO.FileStream lFileStream = new System.IO.FileStream(aFilename, System.IO.FileMode.Create))
        {
          lMemoryStream.Position = 0;
    
          lMemoryStream.CopyTo(lFileStream);
        }
      }      
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-04
      • 1970-01-01
      • 2011-08-14
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2014-09-14
      相关资源
      最近更新 更多