11
votes

Capturez le widget QT en tant que fichier image

Je travaille avec Qglwidget (widget Qt pour OpenGL) et je souhaite pouvoir capturer l'écran affiché par le widget en tant que fichiers JPEG. Comment puis-je atteindre cet objectif? Y a-t-il une fonction qui renvoie ce qui est actuellement affiché sur le widget comme une image?


0 commentaires

5 Réponses :


18
votes

Normalement avec OpenGL, vous lisiez à partir de la tramebuffer à l'aide du glreadpixels () fonction. Cela mettra le contenu de la tramebuffer dans un tampon que vous avez alloué. Vous avez ensuite besoin d'une fonction qui convertira ceci en JPEG.

Cependant, comme vous utilisez qglwidget , vous pouvez utiliser son grabframebuffer () méthode pour obtenir le contenu de la mémoire tampon de cadre sous forme d'objet qImage . C'est probablement le meilleur moyen d'y aller. Vous pouvez saisir le contenu de la tramebuffer, puis utiliser QIMAGE :: Enregistrer () < / code> pour enregistrer dans un fichier.

Si vous passez à QT 5's's QopenglWidget , vous trouverez qu'il a une similaire grabframebuffer () méthode.


2 commentaires

Les deux méthodes mentionnées sont qimage qglwidget :: grabframebuffer (bool withalpha = false) et bool qimage :: const qstring & nom de fichier, const char * format = 0, int Quality = -1) const.


Puis-je capturer le peintre QT comme flux vidéo?




2
votes

Pourquoi ne pas utiliser l'incantation très simple qpixmap :: grabwindow (m_widget-> winid ()) .Save ("/some/file.jpg")


0 commentaires

3
votes

Voici le moyen le plus simple d'enregistrer le widget en tant qu'image, fonctionnant sur Qt 5:

QString file = QFileDialog::getSaveFileName(this, "Save as...", "name", "PNG (*.png);; BMP (*.bmp);;TIFF (*.tiff *.tif);; JPEG (*.jpg *.jpeg)");
ui->myWidget->grab().save(file);


1 commentaires

Malheureusement, cela apparemment (pour moi) ne capture pas qglwidgets contenus dans le widget saisi.



0
votes
QPixmap pixmap = QPixmap::grabWidget( &widget );
pixmap.save("widget.png");

1 commentaires

Tandis que ce code de code est la bienvenue, et peut fournir une aide, ce serait grandement amélioré s'il s'agissait d'une explication de Comment et Pourquoi Cela résout le problème. N'oubliez pas que vous répondez à la question pour les lecteurs à l'avenir, pas seulement la personne qui demande maintenant! S'il vous plaît Modifier Votre réponse à ajouter une explication; En particulier, vous devez expliquer pourquoi vous avez nommé le fichier JPEG si peu conventionnellement, et vous devez probablement montrer comment vous avez confirmé que cela fonctionne également avec GL Widgets, car il le fait avec des widgets QTui simples.