2013-08-30 1 views
0

Il est possible de créer une capture d'écran d'un contenu de fenêtre dans Qt 5? Par exemple nous avons un navigateur web et je veux créer uniquement l'écran de la page sans chrome (fenêtre menus ...). Voici un exemple:Comment créer une capture d'écran de navigateur Web sans chrome dans Qt 5.1

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

image ci-dessus représentent la fonction que je veux mettre en œuvre dans mon application Qt.

Voici l'exemple:

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

il est possible de rendre seulement le contenu (page web) du navigateur ang obtenir l'image?

+0

Veuillez ajouter le code correspondant à ce que vous avez essayé – Ani

Répondre

0

La façon de traiter le problème de chrome dépend de votre objectif. Le "chrome" auquel vous faites référence est une partie de l'application de navigateur Web avec laquelle vous essayez d'interagir. Si vous faites cela en tant que bidouillage rapide en interne, alors vous êtes libre de coder en dur certains décalages nécessaires pour rogner le pixmap original afin que le chrome soit supprimé.

Si vous voulez quelque chose qui peut capturer des captures d'écran de site Web et ne se soucie pas du navigateur utilisé, vous devriez utiliser WebKit fourni avec Qt. Ensuite, vous avez un contrôle total sur l'endroit où les choses sont rendues. Si vous voulez capturer des captures d'écran à partir d'un navigateur fourni par l'utilisateur, une approche consiste à ajouter une extension dans le navigateur et à implémenter un serveur pouvant recevoir des images de l'extension exécutée dans le navigateur. L'extension peut être écrite en javascript sans doute pour tout ce qui existe mais IE. Ce sera spécifique au navigateur, cependant.

Une autre approche consiste à vérifier si le navigateur ne fournit pas d'autres API qui pourraient être utilisées à cette fin, sans avoir besoin d'écrire une extension. Pour autant que je sache, des extensions similaires devraient déjà exister. Il existe sûrement des frameworks de test de site web open source qui vous permettent de rendre un site dans plusieurs navigateurs; ils devraient fournir cette fonctionnalité "saisir à partir d'un navigateur". Nitpick: Dans Qt 5, vous devez utiliser QScreen::grabWindow(), pas QPixmap::grabWindow() obsolète. J'espère aussi que vous êtes au courant que s'il y a des fenêtres devant votre fenêtre et que vous l'obscurcissez, elles seront saisies. La saisie est effectuée à partir de l'écran, pas directement à partir de la fenêtre.

+0

Merci de votre réponse. Je veux supprimer tout ce qui se trouve sur le site (onglets de menus, etc.). Ça devrait être juste un pur écran de webiste que j'ai montré ci-dessus. Malheureusement, je ne peux pas utiliser webkit donc je dois faire ceci QScreen :: grabWindow() et chercher des enfants dans le résultat? Je vois que certaines applications font une sorte de détection (zones) et je ne sais pas maintenant ho pour y parvenir. – QtBTD

+0

S'agit-il d'un produit ou d'un hack interne? –

+0

La méthode la plus simple consiste à coder en dur les valeurs. Vous pouvez utiliser une "analyse" d'image très simple pour déterminer où commence le site. Quelque chose d'aussi simple que de regarder les valeurs de pixels dans l'une des colonnes les plus à gauche dans 'QImage' pour déterminer où s'arrête la couleur du menu/de la barre d'outils. –

Questions connexes