Bild zeichnen mit QPainter, eine Frage der Performance!

Alles rund um die Programmierung mit Qt
Antworten
Mamba
Beiträge: 17
Registriert: 18. April 2006 11:41

Bild zeichnen mit QPainter, eine Frage der Performance!

Beitrag von Mamba »

Hi,

ich habe einen Viewer programmiert, der auf einem QWidget ein Bild malt, welches als QImage vorliegt. Jetzt sollen damit auch Animationen dargestellt werden, das heißt man möchte auf das Bild einzoomen, wobei der Zoomvorgang animiert wird.
Ich bewerkstellige das ganze momentan so:
Zuerst wird das gewünschte (nicht veränderbare) Bild auf ein QImage gemalt, dann erstelle ich einen QPainter für das zu bemalenden QWidget , und verändere für jedes Bild bloß die Transformationsmatrix des Painters, und zeichne dann einfach das Bild. So lässt sich mit Hilfe eines QTimers leicht eine Zoom-Fahrt bewerkstelligen, sowie Panning mit dem Mauszeiger.

Code: Alles auswählen

QPainter painter(this);
m_Matrix.translate (m_Trans.x(), m_Trans.y());
m_Matrix.scale ( m_ScaleFactor, m_ScaleFactor );
painter.setMatrix (m_Matrix);
painter.drawImage (QPointF::QPointF(0.,0.),m_pRenderSource);
Nun habe ich folgendes Probleme:
Ich bekomme bei einem großen QFrame, sowie einem recht vollgemaltem QImage arge Performanceprobleme. Das ganze artet bei Vollbild schnell in eine Ruckelpartie aus. Gibt es eine bessere Möglichkeit ein statisches Bild schnell mit unterschiedlichen Transformationsmatrizen zu zeichnen?


Viele Grüße,
Mamba


[/list]
Emperor_L0ser
Beiträge: 51
Registriert: 28. Juli 2005 12:26
Kontaktdaten:

Beitrag von Emperor_L0ser »

bei größeren bildern kannst du es eh knicken, das schafft kein pc, selbst wen pc's schneller werden, es wird wieder ein bild kommen, das zu groß ist...

ich glaube nicht das qt dafür ausgelegt ist so schnell zu sein, die vorzüge liegen eher im umfang. wenn du grafikanimationen willst musst du näher an die hardware. dafür gibt es z.b. die sdl-lib (platform unabhängig / http://www.libsdl.org ) wie gut diese wirklich ist konnte ich noch nicht prüfen, aber ein versuch ist es sicherlich wert.

mfg Emperor_L0ser
Antworten