2017-02-24 2 views
0

J'essaie de capturer une capture d'écran sur mon pc linux. La compilation de code est bien, mais si je tente de l'exécuter, il ne cesse de lancer la même erreur comme ci-dessous:X11 XGetImage Erreur BadMatch (attributs de paramètres invalides)

X Error of failed request: BadMatch (invalid parameter attributes) 
    Major opcode of failed request: 73 (X_GetImage) 
    Serial number of failed request: 7 
    Current serial number in output stream: 7 

Quelqu'un peut-il me aider à comprendre quel est le problème?

Voici le code:

#include <opencv2/opencv.hpp> 
#include <opencv2/highgui.hpp> 
#include <X11/Xlib.h> 
#include <X11/Xutil.h> 

using namespace cv; 

int main() 
{ 
    Display* d = XOpenDisplay(nullptr); 
    auto root = DefaultRootWindow(d); 

    auto img = XGetImage(d, root, 0, 0, 1000, 1000, AllPlanes, ZPixmap); 
    auto rimg = Mat(1000, 1000, CV_8UC4, img->data); 
    imshow("test image", rimg); 
    waitKey(0); 

    return 0; 
} 
+0

est votre environnement DISPLAY ensemble variable? Si c'est le cas, essayez d'utiliser NULL au lieu de nullptr – cup

+0

Je n'ai pas touché à autre chose. Et la valeur NULL ne fonctionne pas. –

+0

Si le paramètre de XOpenDisplay est NULL ou nullptr, il prend la valeur de la variable d'environnement DISPLAY. Si votre variable d'environnement DISPLAY n'est pas définie, cela vous donnera des erreurs. – cup

Répondre

0

De https://tronche.com/gui/x/xlib/graphics/XGetImage.html

BadMatch Une fenêtre InputOnly est utilisé comme Drawable. BadMatch Un argument ou une paire d'arguments a le type et la plage corrects, mais ne correspond pas d'une autre manière requise par la requête.

Vous devez d'abord mapper la fenêtre avant d'obtenir une image de celle-ci. Utilisez

XMapRaised(d, root); 

avant d'appeler XgetImage

+0

ne fonctionne toujours pas. Voici l'erreur que j'ai reçue: 'X Erreur de la requête échouée: BadMatch (attributs de paramètre non valides) Opcode majeur de la demande ayant échoué: 73 (X_GetImage) Numéro de série de la demande ayant échoué: 9 Numéro de série actuel dans le flux de sortie: 9 ' –

+0

Quelle est la taille de votre écran - est-il au moins 1000x1000 ou plus petit? Vous obtiendrez cette erreur si l'affichage est inférieur à 1000x1000. – cup

+0

Si elle est inférieure à 1000x1000, modifiez les paramètres de largeur et de hauteur de XGetImage à la taille de votre écran. – cup