2016-04-19 21 views
0

當我嘗試使用此代碼的網頁表單保存爲圖像:一般性錯誤+試圖保存圖像

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 
+0

您的ASP.NET工作進程對'D:\'有訪問權嗎? – Alexander

+0

另外,您知道這隻會在您的Web服務器和客戶端瀏覽器位於同一臺計算機上時正常工作,對嗎? – Alexander

+0

@Alexander真的嗎?你確定嗎? – Arbaaz

回答

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

    } 
+0

''System.IO.MemoryStream.MemoryStream(int)'的最佳重載方法匹配有一些無效參數' – Arbaaz