Способ решения проблемы с хромом зависит от вашей цели. «Хром», о котором вы говорите, является частью приложения веб-браузера, с которым вы пытаетесь взаимодействовать.
Если вы делаете это как быструю хакерскую атаку, тогда вы можете жестко закодировать некоторые смещения, необходимые для обрезки исходной pixmap, чтобы удалить хром.
Если вы хотите что-то, что может захватить скриншоты веб-сайта и не важно, какой браузер используется, вы должны использовать WebKit в комплекте с Qt. Тогда у вас есть полный контроль над тем, где материал отображается.
Если вы хотите получить скриншоты из браузера, предоставленного пользователем, то один из них заключается в добавлении расширения в браузер и внедрении сервера, который может получать изображения из расширения, работающего в браузере. Расширение может быть написано в javascript, предположительно, для всего, кроме IE. Тем не менее, это будет характерно для браузера.
Другой подход заключается в том, чтобы проверить, не поддерживает ли браузер какие-либо другие API-интерфейсы, которые могут использоваться для этой цели, без необходимости писать расширение. Насколько я знаю, подобные расширения должны уже существовать. Там, безусловно, есть базы данных тестирования веб-сайтов с открытым исходным кодом, которые позволяют вам отображать сайт в нескольких браузерах; они должны обеспечить эту функциональность «захватить из браузера».
Nitpick: В Qt 5 вы должны использовать QScreen::grabWindow()
, а не устаревшее QPixmap::grabWindow()
. Я также надеюсь, что вы осознаете, что если есть окна перед вашим окном и затеняют его, они будут схвачены. Захват выполняется с экрана, а не непосредственно из окна.
, пожалуйста, добавьте соответствующий код о том, что вы сделали – Ani