QPixmap oder QPainter zoomen

Alles rund um die Programmierung mit Qt
Antworten
JulesBashir
Beiträge: 5
Registriert: 20. Oktober 2004 14:14
Wohnort: Paderborn
Kontaktdaten:

QPixmap oder QPainter zoomen

Beitrag von JulesBashir »

Hallo!

Ich möchte mein Bild (als QPixmap oder QImage oder QPainter) zoomen. Mit den .scale(...)-Methoden geht das auch schon für eine Stufe. Ich möchte aber auch noch weiter/tiefer zoomen. Irgendwie klappt das aber nicht:-( Bisher geht nur einmal rein und einmal raus. Danach ist Schluß (bei QPixmap/QImage/QPainter). Kann mir einer sagen, wie ich dies hier verändern muss:

void MDIWindow::paintPixmap(double &zoomFactor){
// Zoomfunktionen
if ( !f.open( IO_ReadOnly ) )
return;
if(filename.contains(".bmp") || filename.contains(".BMP")) {
tmp->setMaximumHeight(0);
tmp->setMaximumWidth(0);
setFocusProxy(tmp);
setCentralWidget(tmp);
qp.load(filename);
qp.resize((int)(100*zoomFactor) +qp.width(),(int)(100*zoomFactor)+qp.height());
qi.load(filename);
painter.begin(this);
painter.eraseRect (0,0, w, h );
w = (int)(qi.width()*zoomFactor/100);
h = (int)(qi.height()*zoomFactor/100);
qi = qi.scale(w,h);
painter.drawImage (0, 0, qi);
painter.end();
tmp->repaint();
tmp->show();
}
}

Danke schonmal.
MfG JulesBashir
QT? Is it QuickTime???
JulesBashir
Beiträge: 5
Registriert: 20. Oktober 2004 14:14
Wohnort: Paderborn
Kontaktdaten:

Beitrag von JulesBashir »

Hat sich erledigt...:-)
Ich hab jetzt eine Woche rumgerätselt, warum das nicht ging... Jetzt direkt nach dem Beitrag habe ich die Lösung, war ja klar...:-/
Ich habe den zoomFactor vergessen mit heraufzusetzen.
QT? Is it QuickTime???
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Hmm..

Erstmal solltest du die Logik in deiner Anwendung überdenken...
Das Laden von Bildern hat in einer paint()-Funktion nix verloren...

Damit hängen letztendlich auch deine Probleme zusammen. Dadurch, dass du das Bild immer wieder neu lädst, wird das zuletzt sklalierte Bild nicht abgespeichert. So kommt es immer nur zu einem Zoom.

Eine Lösung wäre:

1) Lade das Bild.
2) Konvertiere es zu einem Pixmap
3) Mach dieses Pxmap zu der Klassenvariable deiner Darstellungsklasse QWidget oder QScrollView
4) in der paintEvent() oder viewportPaintEvent() :

QPainter p(this);
QWMatrix m;
m.scale(m_zoom, m_zoom);
p.setWorldMatrix(m); oder p.scale(m_zoom, m_zoom);

5) implementiere den Slot: setZoom(double zoom){ m_zoom = zoom; repaint(false);
}
Antworten