Microsoft Edge WebView2 截图

使用工具可以保存可见区域

CallDevToolsProtocolMethodAsync("Page.captureScreenshot", Params) always returns only visible part of html page including scrollbars. I tried all possible combinations of "fromSurface" and "captureBeyondViewport" values, no difference. I'm using 1.0.705.50 WinForms.

使用下面方法最终解决

        public async Task<Image> TakeWebScreenshot(bool currentControlClipOnly = false)
        {
            dynamic scl = null;
            Size    siz;

            if (!currentControlClipOnly)
            {
                var  res = await wv2.CoreWebView2.ExecuteScriptAsync(@"var v = {""w"":document.body.scrollWidth, ""h"":document.body.scrollHeight}; v;");
                try{ scl = JObject.Parse(res); }catch{}
            }
            siz = scl != null ? 
                        new Size(   (int)scl.w > wv2.Width ? (int)scl.w : wv2.Width,
                                    (int)scl.h > wv2.Height ? (int)scl.h : wv2.Height )
                        :
                        wv2.Size;

            var img = await GetWebBrowserBitmap(siz);
            return img;
        }

        private async Task<Bitmap> GetWebBrowserBitmap(Size clipSize)
        {
            dynamic clip        = new JObject();
            clip.x              = 0;
            clip.y              = 0;
            clip.width          = clipSize.Width;
            clip.height         = clipSize.Height;
            clip.scale          = 1;

            dynamic settings    = new JObject();
            settings.format     = "jpeg";
            settings.clip       = clip;
            settings.fromSurface            = true;
            settings.captureBeyondViewport  = true;

            var p = settings.ToString(Newtonsoft.Json.Formatting.None);

            var devData = await wv2.CoreWebView2.CallDevToolsProtocolMethodAsync("Page.captureScreenshot", p);
            var imgData = (string)((dynamic)JObject.Parse(devData)).data;
            var ms      = new MemoryStream(Convert.FromBase64String(imgData));
            return (Bitmap)Image.FromStream(ms);
        }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值