QPixmap::grabWindow vs. ???

Alles rund um die Programmierung mit Qt
Antworten
funkmenera
Beiträge: 5
Registriert: 11. Oktober 2007 10:52

QPixmap::grabWindow vs. ???

Beitrag 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
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
funkmenera
Beiträge: 5
Registriert: 11. Oktober 2007 10:52

Beitrag 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
Antworten