You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改代码将WebBrowser控件保存为图片而非全屏截图?

解决WebBrowser控件截图而非全屏截图的问题

嘿,我来帮你搞定这个截图问题!你当前代码截到全屏的核心原因是:webBrowser1.Location返回的是控件相对于父容器的坐标,而CopyFromScreen方法需要的是屏幕上的绝对坐标,坐标不匹配就导致截取范围出错了。

修改后的完整代码

Bitmap memoryImage;
private void button2_Click(object sender, EventArgs e)
{
    // 把WebBrowser控件的左上角位置转换成屏幕绝对坐标
    Point screenPos = webBrowser1.PointToScreen(Point.Empty);
    
    Graphics controlGraphics = webBrowser1.CreateGraphics();
    Size controlSize = webBrowser1.Size;
    memoryImage = new Bitmap(controlSize.Width, controlSize.Height, controlGraphics);
    Graphics imageGraphics = Graphics.FromImage(memoryImage);
    
    // 用屏幕绝对坐标截取控件区域
    imageGraphics.CopyFromScreen(screenPos.X, screenPos.Y, 0, 0, controlSize);
    memoryImage.Save(@"C:\Users\Koo\Desktop\NaverMap.png");
    
    // 手动释放图形资源(避免内存泄漏,推荐加上)
    controlGraphics.Dispose();
    imageGraphics.Dispose();
}

关键修改说明

  • 新增Point screenPos = webBrowser1.PointToScreen(Point.Empty):Point.Empty代表控件自身坐标系的(0,0)点(也就是左上角),PointToScreen会把这个点转换成屏幕上的绝对位置,这是解决问题的核心。
  • 将CopyFromScreen的前两个参数替换为screenPos.X和screenPos.Y:这样就精准定位到了WebBrowser控件在屏幕上的实际位置,只会截取控件范围内的内容。

额外小提示

如果你的WebBrowser控件加载的网页内容超出了控件可见区域(有滚动条),想要截取整个网页的完整内容而非仅控件可见部分,那还需要额外处理控件的滚动和内容尺寸,但根据你的需求,上面的代码已经能完美实现“只截取WebBrowser控件本身”的目标啦。

内容的提问来源于stack exchange,提问作者구민재

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:59:11