Seite 1 von 1

QPixmap::grabWindow vs. ???

Verfasst: 17. Januar 2009 11:17
von funkmenera
Tag zusammen !

Folgendes Problem stellt sich mir:

-> Aufnahme eines Fensters oder des Desktops
-> diese Aufnahme als Textur benutzen
-> über der Textur bzw. auf die Textur einen Inhalt zeichnen (transparent!)
-> den Inhalt in einer virtuellen 3D-Umgebung (OpenGL) darstellen

Und eigentlich hab ich das Problem schon gelöst. Dank der großartigen Dokumentation von Qt :D und dem PixelBuffer

Nur stellt sich mir die Frage welche anderen Möglichkeiten es noch gibt um ein Fenster aufzunehmen ?
denn momentan benutze ich grabWindow(), welches ein Pixmap erzeugt. Dieses pixmap wird in den PixelBuffer geschrieben. Der PBuffer erzeugt dann die Textur - das tut also was es soll und das ist schonmal genial.

Aber eine performantere Methode wäre mir lieber, da der Rest vom Programm die CPU schon ordentlich belastet (das ist nicht änderbar) und ich wahnsinnig gerne die Latenz bei der Aufnahme vermeiden würde!
Bzw. die Latenz müsste ich vermeiden um ein korrektes Arbeiten des restlichen Codes gewährleisten zu können !

Würde mich rießig freuen wenn Jemand ne Idee oder Tip parat hat. Und wenn Jemand ne Erklärung für mich hat warum das nicht besser geht ... dann her damit :D

Als dann, Grüße
und im Voraus schonmal ein Danke !
funki

Verfasst: 17. Januar 2009 11:49
von Volker
Ich weiß nicht welche Plattform du verwendest, aber evtl. hilft dir der VH Screen Capture Driver für Windows weiter. Der stellt ein "virtuelles" Videodevice zur Verfügung, das Du dann wie eine Webcam verwenden kannst und der ist recht performant. Bzgl. Darstellung eines Videobilds in Qt gab's hier schon ein paar Beiträge.

Verfasst: 17. Januar 2009 11:54
von funkmenera
Oh, ja ganz vergessen zu erwähnen ... sry

Also Qt-4.4.3 unter Linux

Tipps dazu ?

und danke für die schnelle Antwort !!

Edit: ... xvidcap dürfte wohl das passend(st)e sein, oder gibt es noch (gute/bessere) Alternativen ?

noch ein Edit:
merke gerade (durch zeitmessung), dass es der befehl bindTexture() ist, der so lange braucht. Der eigentliche screenshot Befehl scheint gar nicht sooo lange zu brauchen ....
Gibt es also eine 'schnellere Methode' ein Bild bzw. das Pixmap als Textur zu binden ?
bzw. ... könnte man das irgendwie so ablaufen lassen, dass es den rechner weniger belastet und dadurch 'das stocken'/'der lag' verschwindet .. kann dann auch ruhig länger brauchen zum fertigstellen der textur ... brauch ja nur sowas wie 1 FPS .. oder nen halbes .. wenn überhaupt ;)


und noch ein edit ....
Das Binden der Textur kann deutlich beschleunigt werden, wenn man des 'geschossene' Pixmap einfach etwas verkleinert mit pixmap.scaled() ...
Soweit so gut. Ist halt dann ein tradeoff ... aber okay


Nur hat Jemand ne Ahnung wegen sowas wie einem virtuellen Video device ?
-> hab ja kurze Zeit mit dem gedanken gespielt den code von xvidcap zu nehmen. Aber das wäre wohl ein Kopfschuss in Sachen Aufwand ?!

so long