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
QPixmap oder QPainter zoomen
-
- Beiträge: 5
- Registriert: 20. Oktober 2004 14:14
- Wohnort: Paderborn
- Kontaktdaten:
QPixmap oder QPainter zoomen
QT? Is it QuickTime???
-
- Beiträge: 5
- Registriert: 20. Oktober 2004 14:14
- Wohnort: Paderborn
- Kontaktdaten:
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);
}
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);
}