Ich versuche, einen Screenshot des Bildschirms oder eines Fensters zu erhalten. Ich habe versucht, Funktionen von X11 zu verwenden und es funktioniert gut. Das Problem besteht darin, dass es viel Zeit kostet, die Pixel von XImage zu bekommen. Dann habe ich versucht, mit openGL nach Antworten zu suchen. Folgendes habe ich:
%Vor%Wenn ich das Programm starte, gibt es einen Fehler zurück: X Fehler der fehlgeschlagenen Anfrage: BadAccess (Versuch, auf private Ressource zuzugreifen, verweigert) Hauptoperationscode fehlgeschlagener Anfrage: 199 () Kleiner Opcode der fehlgeschlagenen Anfrage: 26 Seriennummer der fehlgeschlagenen Anfrage: 20 Aktuelle Seriennummer im Ausgabestrom: 20
wenn ich die Zeile mit glXMakeCurrent (dpy, root, glc) kommentiere; vor glc = glXCreateContext (dpy, vi, NULL, GL_TRUE); Es gibt keine Fehler, aber alle Pixel sind 0.
Wie soll ich mit diesem Problem umgehen? Ich bin neu bei openGL und vielleicht fehlt mir hier etwas Wichtiges. Vielleicht gibt es auch eine andere Möglichkeit, Pixel vom Bildschirm oder einem bestimmten Fenster zu bekommen?
Ich denke nicht, was Sie versuchen zu tun ist möglich. Sie können OpenGL nicht verwenden, um Pixel aus Fenstern zu lesen, die Sie nicht besitzen und die wahrscheinlich nicht einmal OpenGL verwenden. Sie müssen bei X11 bleiben.
Wenn Sie XImage
haben, können Sie rohe Pixel von ximage->data
erhalten. Stellen Sie sicher, dass Sie es im richtigen Format lesen.
Sie können XShmGetImage verwenden, aber Sie müssen zuerst die Erweiterungen des X11-Servers abfragen, um sicherzustellen, dass die MIT-SHM-Erweiterung verfügbar ist. Sie müssen außerdem wissen, wie Sie ein Shared-Memory-Segment einrichten und verwenden.
Abfrage der Erweiterung:
Abrufen des Bildes: