2013-08-30 26 views
0

可以在Qt 5中创建Window内容的屏幕截图吗?例如,我们有网页浏览器,我只想创建没有铬的页面的屏幕(菜单窗口...)。这里有一个例子:以上如何在Qt 5.1中创建不带铬的浏览器屏幕截图

http://s7.postimg.org/5ekkmpdbd/question.png

形象代表,我想在我的Qt应用程序来实现该功能。

这里是例子:

originalPixmap = QPixmap::grabWindow(QApplication::activeWindow()->winId()); 

有渲染只有内容(网页)浏览器ANG的获取图像的可能性?

+0

请添加关于您尝试的相关代码 – Ani

回答

0

处理镀铬问题的方式取决于您的目标。您所指的“chrome”是您尝试与之交互的Web浏览器应用程序的一部分。

如果你这样做是作为一个快速的内部黑客,那么你可以自由地硬编码一些偏移,使铬被移除修剪原始像素图需要。

如果你想要的东西,可以抢网截屏和不关心上正在使用的浏览器,你应该使用的WebKit使用Qt捆绑在一起。然后,您可以完全控制渲染内容的位置。

如果你想抓住从用户提供的浏览器截图,再一个方法是添加扩展到浏览器,并实现可以在浏览器中运行的扩展接收图像的服务器。扩展可以写在JavaScript大概是为了那里的一切,但IE浏览器。不过,它将是特定于浏览器的。

另一种方法是检查浏览器不提供可以用于此目的的一些其他的API,而无需编写的延伸。据我所知,类似的扩展应该已经存在。那里肯定有开源的网站测试框架,可以让你在多个浏览器中呈现网站;他们应该提供这种“从浏览器抓取”的功能。

Nitpick:在Qt 5中,您应该使用QScreen::grabWindow(),而不是已弃用的QPixmap::grabWindow()。我也希望你知道,如果窗户前有窗户并遮住窗户,他们会被抓住。抓取是从屏幕完成的,而不是直接从窗口完成。

+0

感谢您的回复。我真的想要删除网站上的所有东西(菜单标签等)。它应该是上面显示的纯粹的webiste屏幕。不幸的是我不能使用webkit,所以我必须这样做QScreen :: grabWindow()并在结果中寻找儿童? 我看到有些应用程序正在做某种检测(区域),我现在不知道要实现这一点。 – QtBTD

+0

这是产品还是内部破解? –

+0

最简单的方法是对值进行硬编码。您可以使用非常简单的图像“分析”来确定网站从何处开始。就像查看'QImage'中最左边一列中的像素值一样简单,找出菜单/工具栏颜色结束的位置。 –

相关问题