【问题标题】:A generic error occurred in GDI+ when trying to save image尝试保存图像时在 GDI+ 中发生一般错误
【发布时间】:2016-04-19 05:53:31
【问题描述】:

我正在尝试使用此代码将网络表单另存为图像:

using System.Drawing.Printing;
using System.Drawing;
using System.Drawing.Imaging; 

        protected void btntopdf_Click(object sender, EventArgs e)
        {
             Capture("D://ScreenShot.jpg");//path to Save Captured files 
        }

        public static void Capture(string CapturedFilePath)
        {
            Bitmap bitmap = new Bitmap
          (System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);

            Graphics graphics = Graphics.FromImage(bitmap as System.Drawing.Image);
            graphics.CopyFromScreen(25, 25, 25, 25, bitmap.Size);

            bitmap.Save(CapturedFilePath, ImageFormat.Jpeg);//ERROR
            bitmap.Dispose();
            graphics.Dispose();

        }  

我收到A generic error occurred in GDI+.

堆栈跟踪

[ExternalException (0x80004005): A generic error occurred in GDI+.]
   System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) +474386
   System.Drawing.Image.Save(String filename, ImageFormat format) +69
   UNO.EmployeePerformanceCreate.Capture(String CapturedFilePath) in D:\Project\UNO\UNO\EmployeePerformanceCreate.aspx.cs:2258
   UNO.EmployeePerformanceCreate.btntopdf_Click(Object sender, EventArgs e) in D:\Project\UNO\UNO\EmployeePerformanceCreate.aspx.cs:2208
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9628114
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724

【问题讨论】:

  • 您的 ASP.NET 工作进程是否有权访问 `D:`?
  • 另外,您知道这只有在您的 Web 服务器和客户端浏览器在同一台机器上时才有效,对吧?
  • @Alexander 真的吗?你确定吗?

标签: c# asp.net .net webforms


【解决方案1】:

不要直接将位图保存到路径,尝试如下:

 protected void Page_Load(object sender, EventArgs e)
    {
        Bitmap bmpScreenshot = Screenshot();
        Bitmap bm;
        byte[] ss = ImageToByte(bmpScreenshot);
        using (var ms = new MemoryStream(ss))
        {
            bm = new Bitmap(ms);
            bm.Save("D:\\Test\\testimage.jpeg", ImageFormat.Jpeg);
        }

    }
    public static byte[] ImageToByte(System.Drawing.Image img)
    {
        ImageConverter converter = new ImageConverter();
        return (byte[])converter.ConvertTo(img, typeof(byte[]));
    }
    private Bitmap Screenshot()
    {
        Bitmap bmpScreenshot =
                new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);

        using (var g = Graphics.FromImage(bmpScreenshot))
        {
            g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
            return bmpScreenshot;
        }

    }

【讨论】:

  • The best overloaded method match for 'System.IO.MemoryStream.MemoryStream(int)' has some invalid arguments
猜你喜欢
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 2015-07-02
  • 2012-07-27
  • 2019-01-02
  • 2010-12-12
  • 1970-01-01
  • 2014-07-27
相关资源
最近更新 更多