非全屏时保存 WebBrowser 控件截图

2024-01-24

我得到了 WebBrowser 控件中包含的网页的屏幕截图,正如所描述的那样here http://www.dreamincode.net/code/snippet3389.htm and here https://stackoverflow.com/questions/3682635/take-screenshots-of-webbrowser-control,但我有一个问题:如果 WebBrowser 控件不是全屏,屏幕截图会被裁剪为控件的大小。

如果WebBrowser控件不是全屏,是否可以保存整个页面的屏幕截图?

这是我当前用于保存屏幕截图的代码:

private void SaveBrowserScreenshot(WebBrowser browser, string path, string name)
{
    const int width = 1024;
    const int height = 768;
    const string extension = ".png";

    using (var bitmap = new Bitmap(width, height))
    {
        var rect = new Rectangle(0, 0, width, height);
        browser.DrawToBitmap(bitmap, rect);

        using (var image = bitmap)
        {
            using (var graphic = Graphics.FromImage(image))
            {
                graphic.CompositingQuality = CompositingQuality.HighQuality;
                graphic.SmoothingMode = SmoothingMode.HighQuality;
                graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;

                image.Save(String.Concat(path, "\\", name, extension), ImageFormat.Png);
            }
        }
    }
}

性能不是问题,因为这永远不会在生产中使用。


由于我的 WebBrowser 控件被隐藏,我只需调整其大小即可解决此问题。如果控件未隐藏,则在保存屏幕截图时它将重新调整大小。

private void SaveBrowserScreenshot(WebBrowser browser, string path, string name)
{
    const string extension = ".png";

    int width = Math.Max(1024, Screen.PrimaryScreen.Bounds.Width);
    int height = Math.Max(768, Screen.PrimaryScreen.Bounds.Height);
    int originalWidth = browser.Width;
    int originalHeight = browser.Heignt;

    browser.Width = width;
    browser.Heigt = height;

    using (var bitmap = new Bitmap(width, height))
    {
        var rect = new Rectangle(0, 0, width, height);
        browser.DrawToBitmap(bitmap, rect);

        using (var image = bitmap)
        {
            using (var graphic = Graphics.FromImage(image))
            {
                graphic.CompositingQuality = CompositingQuality.HighQuality;
                graphic.SmoothingMode = SmoothingMode.HighQuality;
                graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;

                image.Save(String.Concat(path, "\\", name, extension), ImageFormat.Png);
            }
        }
    }

    browser.Width = originalWidth;
    browser.Height = originalHeight;
}

作为替代方案,您可以创建另一个 WebBrowser 控件,将其隐藏并按照 willDaBeast 的建议重新调整其大小,但这会对性能产生一些影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非全屏时保存 WebBrowser 控件截图 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在

随机推荐

  • 随机 Python 字典键,按值加权

    我有一本字典 其中每个键都有一个可变长度的列表 例如 d a 1 3 2 b 6 c 0 0 有没有一种干净的方法来获取随机字典键 并按其值的长度加权 random choice d keys 会对键进 行同等的权重 但在上面的情况下我想要
  • “dapper-dot-net”中的交易

    如果我的 DAL 使用 dapper dot net 如何创建交易 我的 C winform 应用程序将在网络中使用 数据将保存到中央 SQL 服务器 我的用例需要使用事务 我可以使用 dapper 来完成此操作 还是需要使用 NHiber
  • Facebook iOS - 检查我的 Facebook 应用程序是否已获得授权

    我的问题是如何检查我的 Facebook 应用程序是否已被用户授权发帖 但找不到任何相关信息 我在用着 Facebook facebook Facebook alloc initWithAppId 1234567 facebook auth
  • PHP“漂亮打印”HTML(不是 Tidy)

    我正在 PHP 中使用 DOM 扩展来构建一些 HTML 文档 并且我希望输出能够很好地格式化 使用换行符和缩进 以便它是可读的 但是 从我所做的许多测试来看 formatOutput true 根本不适用于 saveHTML 仅适用于 s
  • 如何检测 HTML5 中任何元素的大小调整

    监听元素调整大小事件的最佳实践应该是什么 一旦元素的大小发生变化 我想重新定位元素 在我的例子中是 jQuery 对话框 但我现在更感兴趣的是以一般方式监听调整大小事件 而不知道调整大小是如何发生的 它应该很简单 直到我发现一个元素可以通过
  • 通知号码和冰淇淋三明治?

    http developer android com reference android app Notification html number http developer android com reference android a
  • 我如何知道接口何时直接在忽略继承接口的类型中实现?

    出现的问题是当我有一个实现接口的类 并扩展一个实现接口的类时 class Some SomeBase ISome class SomeBase ISomeBase interface ISome interface ISomeBase 由于
  • VS Code 中的 Hugo 模板格式

    VS Code 中的自动格式通过删除缩进使我的代码无法读取 我不知道如何仅针对车把关闭此功能 Input range if if
  • 是什么原因导致错误“java.security.InvalidKeyException:参数丢失”? [复制]

    这个问题在这里已经有答案了 我正在尝试使用 AES 加密和解密字符串 但出现错误 我不知道如何解决 这是代码 public class EncryptionTest public static void main String args S
  • Lawnchair .nuke() 在填满我的存储配额后无法工作

    我在用着草坪椅 http westcoastlogic com lawnchair 使用我的 Web 客户端 Firefox 13 0 的 dom 适配器 存储持久数据并已达到存储配额 Console log 说 Persistent st
  • 用于图像哈希的 Flutter 计算函数

    hii 我正在尝试实现计算功能 我正在尝试使用 image picker 插件通过相机单击图像 然后我试图获取图像文件的哈希摘要 由于它是一个非常密集的操作 我尝试使用计算功能但无法这样做 这就是我到目前为止所做的 final File p
  • Htaccess缓存问题

    这让我彻底疯了 我一直在这个新安装的服务器上使用 URL 重写来自定义 URL 但似乎我在 htaccess 中编写的任何 URL 重写规则都将永远被考虑在内 Example RewriteRule dashboard calendar c
  • Node.js 应用程序在 Heroku 上不断崩溃,并给出错误 Boot timeout

    我正在开发一个示例 node js 应用程序 它在本地运行良好 node index js 但是 当我将其推送到 Heroku 实例时 它崩溃并出现以下错误 2017 10 23T06 08 07 000000 00 00 app api
  • sqlalchemy 中的点类型?

    我在 Postgres 中发现了关于 Point 类型的信息 http www postgresql org docs current interactive datatype geometric html http www postgre
  • 如何序列化邮件消息?

    当尝试使用 los 格式化程序序列化 Gmail 消息时 我收到以下信息 错误 Sys WebForms PageRequestManagerServerErrorException 序列化 System Net Mail MailMess
  • 如果有多个iis服务器,如何实现SignalR?

    使用 SignalR 时是否支持 iis 节点集群 或者我需要一些第三方消息总线吗 还没有 但他们正在努力 计划发布 0 4 版本 准备就绪后 更多信息可能会在 wiki 中发布 SignalR 和 Webfarms http github
  • 在 Tab 单击事件上禁用 TabView 动画?

    我怎样才能禁用TabView动画时Tab in TabBar点击 我添加了 physics NeverScrollableScrollPhysics 对于 TabView 但不适用于 TabBar 我在用着DefaultTabControl
  • toLocaleDateString Javascript日期格式问题[重复]

    这个问题在这里已经有答案了 我有一个脚本 我想将日期格式化为短日期格式 即 2013 年 7 月 3 日或 2013 年 7 月 3 日 第一个日期格式的呈现方式与 Chrome 中的呈现方式类似 但其他浏览器则不然 它显示日期 月份名称和
  • 在多个程序集中定义的 System.Tuple

    我刚刚在 Windows 8 中安装了 VS 11 当我获得使用 VS 2010 构建的最新解决方案 然后构建它时 我收到此错误 在 VS 11 中 预定义类型 System Tuple 在多个程序集中定义 在全局别名中 使用 c Prog
  • 非全屏时保存 WebBrowser 控件截图

    我得到了 WebBrowser 控件中包含的网页的屏幕截图 正如所描述的那样here http www dreamincode net code snippet3389 htm and here https stackoverflow co