2013-08-30 5 views
0

Можно создать скриншот содержимого окна в Qt 5? Например, у нас есть веб-браузер, и я хочу создать экран только страницы без хрома (меню меню ...). Вот пример:Как создать снимок экрана веб-браузера без хрома в Qt 5.1

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

Изображение выше, представляют собой функции, которые я хочу реализовать в своем приложении Qt.

Вот пример:

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

есть возможность оказывать только содержание (веб-страницы) из браузера анг получить изображение?

+0

, пожалуйста, добавьте соответствующий код о том, что вы сделали – Ani

ответ

0

Способ решения проблемы с хромом зависит от вашей цели. «Хром», о котором вы говорите, является частью приложения веб-браузера, с которым вы пытаетесь взаимодействовать.

Если вы делаете это как быструю хакерскую атаку, тогда вы можете жестко закодировать некоторые смещения, необходимые для обрезки исходной pixmap, чтобы удалить хром.

Если вы хотите что-то, что может захватить скриншоты веб-сайта и не важно, какой браузер используется, вы должны использовать WebKit в комплекте с Qt. Тогда у вас есть полный контроль над тем, где материал отображается.

Если вы хотите получить скриншоты из браузера, предоставленного пользователем, то один из них заключается в добавлении расширения в браузер и внедрении сервера, который может получать изображения из расширения, работающего в браузере. Расширение может быть написано в javascript, предположительно, для всего, кроме IE. Тем не менее, это будет характерно для браузера.

Другой подход заключается в том, чтобы проверить, не поддерживает ли браузер какие-либо другие API-интерфейсы, которые могут использоваться для этой цели, без необходимости писать расширение. Насколько я знаю, подобные расширения должны уже существовать. Там, безусловно, есть базы данных тестирования веб-сайтов с открытым исходным кодом, которые позволяют вам отображать сайт в нескольких браузерах; они должны обеспечить эту функциональность «захватить из браузера».

Nitpick: В Qt 5 вы должны использовать QScreen::grabWindow(), а не устаревшее QPixmap::grabWindow(). Я также надеюсь, что вы осознаете, что если есть окна перед вашим окном и затеняют его, они будут схвачены. Захват выполняется с экрана, а не непосредственно из окна.

+0

Спасибо за ответ. Я точно хочу удалить все вещи вокруг веб-сайта (вкладки меню и т. Д.). Это должен быть просто чистый экран webiste, который я показал выше. К несчастью, я не могу использовать webkit, поэтому мне нужно сделать это QScreen :: grabWindow() и искать в результатах поиска детей? Я вижу, что некоторые приложения делают какие-то обнаружения (области), и я не знаю, как это сделать. – QtBTD

+0

Это для продукта или внутреннего хака? –

+0

Самый простой способ - это значения жесткого кода. Вы можете использовать очень простой «анализ» изображения, чтобы выяснить, где начинается сайт. Что-то так же просто, как смотреть на значения пикселей в одном из самых левых столбцов в 'QImage', чтобы выяснить, где заканчивается цвет меню/панели инструментов. –

 Смежные вопросы

  • Нет связанных вопросов^_^