Hi zusammen,
ich möchte den Inhalt eines OpenGL Fensters ausdrucken. Ich habe mittlerweile folgende Funktion zusammengebastelt aber leider kommt beim Drucken nichts an. Weiss jemand woran das liegt !?
QPrinter printer(QPrinter::HighResolution);
printer.setup(this);
QPainter painter(&printer);
QRect rect = painter.viewport();
QImage image;
QSize size = image.size();
size.scale(rect.size(), QSize::ScaleMin);
painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setWindow(image.rect());
painter.drawImage(0, 0, image);
Irgendwo muss doch auch die Zuweisung des OpenGL Fensters gemacht werden... das bei mir überigens "viewport2" heisst.
Bin für Hilfe sehr dankbar
MfG
klausn
Print eines OpenGL Fensters
So,
ich habe meine Screenshot Funktion und meine Druckfunktion (Drucken des Screenshots) einfach zusammengefügt. Und nun kommt auch hinten was raus.
QPrinter printer(QPrinter::HighResolution);
printer.newPage();
printer.setup(this);
QPainter painter(&printer);
QRect rect = painter.viewport();
QWidget* w = viewport2; //nur OpenGL Fenster
QPixmap snapshot = QPixmap::grabWindow(w->winId(), 0, 0, -1, -1);
painter.drawPixmap(0,0,snapshot);
Die Sache hat nur einen Haken ... durch die Öffnung des Druckdialoges wird ein Teil vom OpenGL Bild überdeckt. Das ist natürlich beim Druckbild auch so. Wie kann man das beheben ???
Also wie macht man z.B. einen Screenshot, nur vom Inhalt eines Fensters .. ohne das z.B. davor liegende Fenster mit aufgenommen werden ????
danke schonmal
es handelt sich um qt 3.3.3
ich habe meine Screenshot Funktion und meine Druckfunktion (Drucken des Screenshots) einfach zusammengefügt. Und nun kommt auch hinten was raus.
QPrinter printer(QPrinter::HighResolution);
printer.newPage();
printer.setup(this);
QPainter painter(&printer);
QRect rect = painter.viewport();
QWidget* w = viewport2; //nur OpenGL Fenster
QPixmap snapshot = QPixmap::grabWindow(w->winId(), 0, 0, -1, -1);
painter.drawPixmap(0,0,snapshot);
Die Sache hat nur einen Haken ... durch die Öffnung des Druckdialoges wird ein Teil vom OpenGL Bild überdeckt. Das ist natürlich beim Druckbild auch so. Wie kann man das beheben ???
Also wie macht man z.B. einen Screenshot, nur vom Inhalt eines Fensters .. ohne das z.B. davor liegende Fenster mit aufgenommen werden ????
danke schonmal
es handelt sich um qt 3.3.3
Was ja auch dokumentiert ist:Die Sache hat nur einen Haken ... durch die Öffnung des Druckdialoges wird ein Teil vom OpenGL Bild überdeckt. Das ist natürlich beim Druckbild auch so.
The grabWindow() function grabs pixels from the screen, not from the window, i.e. if there is another window partially or entirely over the one you grab, you get pixels from the overlying window, too
in dem man grabWindow _vor_ dem Druckerdialog aufruft, oder gleich das Widget (grabWidget(myPointerToSeOpenGlWidget)) nimmt?Wie kann man das beheben ???
hab jetzt alles ausprobiert...
grabwindow, grabwidget, grabframebuffer, renderpixmap
funktioniert alles nicht. Da kommt immer ein schwarzes oder ein graues Bild raus.
Das einzige was funktioniert ist grabwindow , wenn ich es vor dem Druckerdialog ausführe.
QGLWidget bla;
QPixmap snapshot = bla.grabFrameBuffer(true);
snapshot.save("screenshot.png", "PNG", 100);
hierbei wird ein komplett schwarzes Bild ausgegeben, das allerdings die richtigen Maße hat.
grabwindow, grabwidget, grabframebuffer, renderpixmap
funktioniert alles nicht. Da kommt immer ein schwarzes oder ein graues Bild raus.
Das einzige was funktioniert ist grabwindow , wenn ich es vor dem Druckerdialog ausführe.
QGLWidget bla;
QPixmap snapshot = bla.grabFrameBuffer(true);
snapshot.save("screenshot.png", "PNG", 100);
hierbei wird ein komplett schwarzes Bild ausgegeben, das allerdings die richtigen Maße hat.