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

2019-10-19 04:47发布

我试图创建图像webBrowser控件的输出。 以下是我都试过了。 和有些达到我想要的,但问题是图像不是全高,它一定高度后得到修剪。

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

HTML 1-4是在webBrowser ,以及空间后1-3是从下面代码创建的图像。

这里是代码:

    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;

Answer 1:

WebBrowser控制实际只是一个ActiveX控件的包装,所以在相同的方式,定期的UIElement将不会呈现在屏幕之外。

MSDN文章

WebBrowser控件内部实例化本地的WebBrowser ActiveX控件。

幸运的是,它看起来像已经有解决这个控制的限制,工作一个博客:

伊沙伊Galatzer



文章来源: VisualTreeHelper.GetDrawing not returning complete image WPF