VisualTreeHelper.GetDrawing没有返回完整的图像WPF

时间:2014-01-07 18:02:04

标签: c# wpf webbrowser-control screenshot

我正在尝试从webBrowser控件的输出创建图像。以下是我的尝试。并且有点实现我想要的,但问题是图像不是全高,它会在一定高度后修剪。

在图片中你可以看到有4行,但图像是2行半行。请指导。

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;

1 个答案:

答案 0 :(得分:1)

WebBrowser控件实际上只是一个ActiveX控件的包装器,因此不会像常规UIElement一样呈现在屏幕外。

MSDN Article

WebBrowser控件在内部实例化本机WebBrowser ActiveX控件。

幸运的是,看起来有一个博客已经解决了这个控件的局限性:

Yishai Galatzer