2011-10-27 1 views
0

Existe-t-il un moyen de capturer l'intégralité de l'écran généré par QML? Quelque chose comme copier le tampon de dessin dans OpenGL ou DirectX. L'idée est de capturer la sortie de l'ensemble de l'écran puis de faire une soustraction de l'image avec un flux de caméra de l'écran afin de pouvoir détecter les objets sur le dessus de l'écran.Comment capturer le tampon de dessin QML

Merci.

Répondre

2

Je pense que vous voulez QPixmap::grabWindow(...), mais je crains de ne pas utiliser QML, donc je ne suis pas certain de la façon dont vous obtiendriez l'obtention du pixmap ou son utilisation. Si l'on regarde une partie de la documentation de Qt, on peut penser que le sous-classement QDeclarativeImageProvider serait un bon point de départ. Quelque chose comme:

class cScreenGrabber : public QDeclarativeImageProvider 
{ 
public: 
    cScreenGrabber() 
    : QDeclarativeImageProvider(QDeclarativeImageProvider::Pixmap) { } 

    QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) 
    { 
    QWidget *ViewWidget = //get the widget containing your view// 
    QPixmap Pixmap = QPixmap::grabWindow(ViewWidget.winId(), 0, 0, 
             requestedSize.width() > 0 ? requestedSize.width() : -1, 
             requestedSize.height() > 0 ? requestedSize.height() : -1); 

    if (size) 
     *size = QSize(Pixmap.width(), Pixmap.height());  

    return Pixmap; 
    } 
}; 
+0

QPixmap :: grabWidget() fonctionne dans ce cas pour moi puisque mon QML est enveloppé dans une fenêtre QWidget. Merci pour votre aide. –