2013-08-30 24 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'中最左邊一列中的像素值一樣簡單,找出菜單/工具欄顏色結束的位置。 –

相關問題