2014-04-28 52 views
0

我試圖捕獲MainWindow和主窗口上的內容的屏幕截圖。 MainWindow有時會落後於其他元素,並且需要在沒有其他重疊元素的情況下進行屏幕捕獲。此代碼當前返回沒有任何內容的空白MainWindow表單的位圖。表單有一堆不同的動態UI元素。如何獲取MainWindow的當前截圖/捕獲及其內容? MainWindow內容的代碼很長,所以我希望這已經足夠了。捕獲窗體和表單上的屏幕截圖

Rectangle bounds = new Rectangle(); 
bounds.Width = Program.MainWindow.Width; 
bounds.Height = Program.MainWindow.Height; 

screenShot = new Bitmap(Program.MainWindow.Width, 
         Program.MainWindow.Height, 
         PixelFormat.Format32bppRgb); 
Program.MainWindow.DrawToBitmap(screenShot, bounds); 
+1

CopyFromScreen方法得到它你嘗試'CopyFromScreen()''的類graphics'成員? – pinkfloydx33

+0

是的,但我得到了一個黑色的位圖 – Yuval

+0

好吧,剛剛得到了CopyFromScreen()的工作,但我希望它只捕獲MainWindow窗體,而不是其他兩個窗體,這些窗體將在截圖時被打開。有任何想法嗎? – Yuval

回答

1

您應該能夠通過使用Graphics

 Rectangle bounds = Program.MainWindow.Bounds; 
     Bitmap b = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb); 
     using (Graphics g = Graphics.FromImage(b)) 
     { 
      g.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy); 
     } 
     b.Save("YOUR FILE NAME HERE"); 
+0

這捕獲了邊界的屏幕截圖,但我想要一個MainWindow的屏幕截圖,在某些情況下它將在後臺顯示。 – Yuval

+0

如果它在背景中,您將無法拍攝它。它必須在前臺,否則沒有什麼可以複製的。您可能能夠通過使用表單的圖形對象來解決它,但即使這樣也不能保證工作。 – pinkfloydx33

+0

這一半解決了這個問題。我最終通過主窗口頂部的開放表單元素進行迭代,並將它們的不透明度設置爲0,然後執行CopyFromScreen並將其不透明度重新設置爲1.我知道這不是一種很好的方法,我確信一個更好的方法,但現在這工作。謝謝您的幫助。 – Yuval