说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Runtime.InteropServices.ExternalException: GDI+ 中发生一般性错误。源错误: 
行 50:         if (_Result == WebsitesScreenshot.WebsitesScreenshot.Result.Captured)
行 51:         {
行 52:             _WebsitesScreenshot.SaveImage(path + "\\google.jpg");
行 53:             Response.Write("");
行 54:             Response.Write("<img src=google.jpg>");
 *************************************错误52行**************************************************protected void Button1_Click(object sender, EventArgs e)
    {
        WebsitesScreenshot.WebsitesScreenshot _WebsitesScreenshot = new WebsitesScreenshot.WebsitesScreenshot();
        WebsitesScreenshot.WebsitesScreenshot.Result _Result ;
        string path = null;
        path = Server.MapPath(".");
        _WebsitesScreenshot.ImageHeight = 300;
        _WebsitesScreenshot.ImageWidth = 200;
        _Result = _WebsitesScreenshot.CaptureWebpage("http://www.google.com");
        if (_Result == WebsitesScreenshot.WebsitesScreenshot.Result.Captured)
        {
            _WebsitesScreenshot.SaveImage(path + "\\google.jpg");
            Response.Write("");
            Response.Write("<img src=google.jpg>");
        }
        else if (_Result == WebsitesScreenshot.WebsitesScreenshot.Result.Failed)
        {
            Response.Write("");
            Response.Write("Failed");
        }
        else if (_Result == WebsitesScreenshot.WebsitesScreenshot.Result.Timeout)
        {
            Response.Write("");
            Response.Write("Timeout");
        }
        _WebsitesScreenshot.Dispose();
    }
这是部分代码,请各位商手帮帮忙,很急啊,郁闷死我了

解决方案 »

  1.   

    应该是在一个非UI线程(不是主线程的工作线程)中,使用了GDI+的方法。
      

  2.   


    原因一般是写入文件时,.net没有该目录的写入权限。解决方案:增加iis(对aspx而言)对该目录的写入权限。
      

  3.   

    关于您提到的“System.Runtime.InteropServices.ExternalException: GDI+ 中发生一般性错误,”的问题,根据我的经验,是由于代码中img.Save(FilePath,ImageFormat.Bmp);引起的。
    原因是因为Html网页及Http协议不支持BMP格式的图片文件导致的。而解决方法就是我们在调用Save方法时将格式转化为JPEG或者GIF,但由于GIF仅支持256色,会引起图片失真,所以我建议转化为JPEG格式,如下语句:
    img.Save(FilePath, ImageFormat.Jpeg);