Seite 1 von 1

OpenGL Bild als Screenshot ausgeben

Verfasst: 23. September 2009 15:17
von Klausn
Hi zusammen

ich erzeuge einen Screenshot eines OpenGL Fensters. Das ganze funktioniert auch wunderbar. Aber:

Wenn ich auf das File Menu klicke, öffnet sich dieses und verdeckt somit einen Teil des OpenGL Fensters. Wenn man nun auf Screenshot klickt , wird der Inhalt des OpenGL Fensters abgegriffen ... aber leider wird die verdeckte Fläche mit abgegriffen .. und erscheint als graues Feld auf dem letztendlichen Screenshot !

Hat jemand eine Idee wie man das beseitigt ?

Funktion zur Screenshoterstellung:

QDesktopWidget* desktop = QApplication::desktop();
QWidget* w = viewport2; //nur OpenGL Fenster
QPixmap snapshot = QPixmap::grabWindow(w->winId(), 0, 0, -1, -1);

PS: Der schwarze Bereich ist völlig normal, den habe ich so eingefärbt. Es geht mir um den grauen Bereich.

Vielen Dank für Hilfe

REsultat:

Verfasst: 23. September 2009 15:34
von John Darius
Hallo Klausen

Versuch den Screenshot mal mit

Code: Alles auswählen

QImage image = glWidget->grabFrameBuffer();
zu machen, klappt bei mir einwandfrei.

Verfasst: 25. September 2009 11:37
von N¤X
Den Framebuffer zu grabben ist vermutlich das beste, da das recht fix ist.
Was du aber auch machen kannst ist renderPixmap(...), da wird zwar die Szene komplett neu gerendert, das sollte aber bei interaktiven Sachen eh nur nen Sekundenbruchteil dauern, und so kannst du angeben wie groß der Screenshot sein soll (es ist also nicht wirklich ein Screenshot in dem Sinne, sondern die Szene wird halt komplett neu in eine QPixmap beliebiger größe gerendert).

Verfasst: 25. September 2009 12:14
von AuE
Was wäre wenn du nen GrabWidget machst statt das Window?

Verfasst: 28. September 2009 11:24
von Klausn
hi danke für die antworten ...

immer wenn ich den Framebuffer grabben will, kommt am ende ein graues oder schwarzes Bild in der Größe der Hauptanwendung raus. Das heisst also, das die Größe des Fenster richtig übergeben wird, aber der Inhalt nicht richtig gerendert wird.