处理 chrome 问题的方法取决于您的目标是什么。您所指的“chrome”是您尝试与之交互的 Web 浏览器应用程序的一部分。
如果您将此作为快速的内部 hack,那么您可以自由地硬编码修剪原始像素图所需的一些偏移量,以便删除 chrome。
如果你想要一些可以抓取网站截图并且不关心正在使用哪个浏览器的东西,你应该使用与 Qt 捆绑的 WebKit。然后,您可以完全控制渲染内容的位置。
如果您想从用户提供的浏览器中抓取屏幕截图,那么一种方法是在浏览器中添加一个扩展,并实现一个服务器,该服务器可以从浏览器中运行的扩展接收图像。扩展可以用 javascript 编写,大概适用于除 IE 之外的所有内容。不过,它将是特定于浏览器的。
另一种方法是检查浏览器是否不提供其他一些可用于此目的的 API,而无需编写扩展程序。据我所知,类似的扩展应该已经存在。肯定有开源网站测试框架可以让您在多个浏览器中呈现网站;他们应该提供这种“从浏览器抓取”功能。
Nitpick:在 Qt 5 中,您应该使用QScreen::grabWindow()
. 而不是弃用的QPixmap::grabWindow()
. 我还希望您知道,如果您的窗户前面有任何窗户并将其遮挡住,它们就会被抓住。抓取是从屏幕完成的,而不是直接从窗口完成。