2014-01-07 33 views
0

我想從webBrowser控件的輸出創建圖像。以下是我所嘗試過的。並且有些達到了我想要的,但是問題是圖像不是全高,它在一定高度之後得到修整。VisualTreeHelper.GetDrawing不返回完整圖像WPF

在圖片中你可以看到有4行,但圖像是2 n半行。請指導。

HTML 1-4在webBrowser中,而空格1-3是從下面的代碼創建的圖像。

enter image description here

這裏是代碼:

private void WebBrowser1_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
     var wb = (WebBrowser)sender; 
     var htmlDoc = wb.Document as mshtml.HTMLDocument; 
     if (htmlDoc == null || htmlDoc.body == null) return; 
     var body = (mshtml.IHTMLElement2)htmlDoc.body; 
     wb.Height = body.scrollHeight; 
     wb.Width = body.scrollWidth; 

     var imgScreen = new Image 
     { 
      Width = body.scrollWidth, 
      Height = body.scrollHeight, 
      Source = new DrawingImage(VisualTreeHelper.GetDrawing(wb)) 
     }; 

     // Add Image to the UI 
     StackPanel1.Children.Add(imgScreen); 
    } 

也試過下面的代碼相同的結果:

 DrawingVisual vis = new DrawingVisual(); 
     DrawingContext cont = vis.RenderOpen(); 
     cont.DrawDrawing(VisualTreeHelper.GetDrawing(wb)); 
     cont.Close(); 

     RenderTargetBitmap rtb = new RenderTargetBitmap(body.scrollWidth, body.scrollHeight, 96d, 96d, PixelFormats.Default); 
     rtb.Render(vis); 
     imgScreen1.Source = rtb; 
+0

你爲什麼不嘗試http://stackoverflow.com/questions/891345/get-a -screenshot-of-specific-application? –

+0

@AkashKava非常有趣,感謝4鏈接我會看看它 – ADi

回答

1

WebBrowser控制實際只是一個ActiveX控件的包裝,所以會不會像普通UIElement那樣在屏幕外渲染。

MSDN Article

web瀏覽器控件內部實例化天然web瀏覽器ActiveX控件。

幸運的是,它看起來像有一個博客已經解決這個控制的限制工作:

Yishai Galatzer

+0

我已經知道你寫了什麼,但它與我的問題沒有關係。 – ADi