2010-10-07 166 views
3

我有一個Frame元素在我的WPF應用程序中顯示一個html頁面,並希望將Frame的屏幕截圖保存爲圖像。保存WPF網頁瀏覽器的屏幕截圖Frame

隨着谷歌的幫助下,我有這樣的代碼:

Size size = new Size(PreviewFrame.ActualWidth, PreviewFrame.ActualHeight); 
PreviewFrame.Measure(size); 
PreviewFrame.Arrange(new Rect(size)); 

var renderBitmap = new RenderTargetBitmap(
      (int)size.Width, 
      (int)size.Height, 
      96d, 
      96d, 
      PixelFormats.Pbgra32); 
renderBitmap.Render(PreviewFrame); 

但所有我曾經得到的是一個空白圖像。

有關如何解決這段代碼和/或以另一種方式捕捉網頁作爲我的應用中的圖像的想法?

回答

2

原來的GDI Graphics類有一個CopyFromScreen方法行之有效,並捕獲Frame的內容:

var topLeftCorner = PreviewFrame.PointToScreen(new System.Windows.Point(0, 0)); 
var topLeftGdiPoint = new System.Drawing.Point((int)topLeftCorner.X, (int)topLeftCorner.Y); 
var size = new System.Drawing.Size((int)PreviewFrame.ActualWidth, (int)PreviewFrame.ActualHeight); 

var screenShot = new Bitmap((int)PreviewFrame.ActualWidth, (int)PreviewFrame.ActualHeight); 

using (var graphics = Graphics.FromImage(screenShot)) { 
    graphics.CopyFromScreen(topLeftGdiPoint, new System.Drawing.Point(), 
     size, CopyPixelOperation.SourceCopy); 
} 

screenShot.Save(@"C:\screenshot.png", ImageFormat.Png); 
+0

CopyFromScreen不DPI知道,所以如果你的用戶是在DPI運行的100多設置其他%(96dpi)結果圖像不正確。更現代的RenderTargetBitmap應該解決這個問題,但似乎不適用於WPF WebBrowser。 – phoff 2012-02-01 21:13:27

+0

今天有什麼解決方案可以讓WPF WebBrowser正確渲染截圖圖像,而不依賴於使用哪種DPI設置? – Nuts 2014-09-21 21:43:59