繁体   English   中英

尝试保存图像时,GDI +中发生一般错误

[英]A generic error occurred in GDI+ when trying to save image

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

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

与其直接将位图保存到路径,不如尝试以下操作:

 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;
        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM