Hallo!
Hier kommt mal wieder eine Anfängerfrage:
Ich möchte auf einer Zeichenebene (QImage oder QPixmap?) etwas zeichnen und das dann als ein neues Bild abspeichern.
Dieses Bild möchte ich von einer anderen Klasse aus laden und dort verschieben, strecken... können.
Bereits existierende Bilder laden kann ich, aber wenn ich auf denen etwas neues zeichne und pixmap.save(":/images/testbild.png"); aufrufe, wird es ja nie überschrieben, sondern behält sein altes Aussehen.
Warum ist das so?
Wie kann ich ein neues Bild abspeichern, so dass ich wieder darauf zugreifen kann?
(Hilfe und Bücher sind nicht sehr ausführlich, finde ich)
Danke für Tipps!
Bild zeichnen und abpeichern, wie???
-
bassjupp2oo8
- Beiträge: 47
- Registriert: 17. Juli 2008 09:45
-
bassjupp2oo8
- Beiträge: 47
- Registriert: 17. Juli 2008 09:45
Hier mal ein Stück Bsp-Code.
void mainWidget::paintEvent( QPaintEvent *event){
QPainter painter(this);
QPixmap pixmap(":/images/bild.png");
painter.begin(this);
painter.drawPixmap(0,0,pixmap);
painter.setPen( QPen(Qt::blue,6));
painter.drawLine(10, 10, 200, 400);
pixmap.save(":/images/bild1.png", 0, -1);
// oder so:
// pixmap.save(":/images/bild1.png", "png", 50);
// oder gleicher Name "bild", um Original zu überschreiben?
// zum Überprüfen, ob Speichern gelingt:
if (pixmap.save(":/images/bild1.png", "png", 50) == true)
painter.drawText(5,180, tr("Speichern ging"));
else
painter.drawText(5,180, tr("Speichern misslang"));
// schreibt gar nichts!
painter.end();
}
Er zeichnet das Bild in die Ecke und auch die Linie.
Aber das Speichern misslingt immer.
Müsste das Bild beim Speichern den gleichen Namen haben wie beim Laden (oder kann man auch unter einem anderen Namen abspeichern?)
Sind die format und quality Flags richtig? Laut Hilfe soll man defaultmäßig 0,-1 nehmen, aber auch für das andere bekomme ich keine Fehlermeldung vom Compiler.
Gespeichert wird trotzdem nie was. Warum???
void mainWidget::paintEvent( QPaintEvent *event){
QPainter painter(this);
QPixmap pixmap(":/images/bild.png");
painter.begin(this);
painter.drawPixmap(0,0,pixmap);
painter.setPen( QPen(Qt::blue,6));
painter.drawLine(10, 10, 200, 400);
pixmap.save(":/images/bild1.png", 0, -1);
// oder so:
// pixmap.save(":/images/bild1.png", "png", 50);
// oder gleicher Name "bild", um Original zu überschreiben?
// zum Überprüfen, ob Speichern gelingt:
if (pixmap.save(":/images/bild1.png", "png", 50) == true)
painter.drawText(5,180, tr("Speichern ging"));
else
painter.drawText(5,180, tr("Speichern misslang"));
// schreibt gar nichts!
painter.end();
}
Er zeichnet das Bild in die Ecke und auch die Linie.
Aber das Speichern misslingt immer.
Müsste das Bild beim Speichern den gleichen Namen haben wie beim Laden (oder kann man auch unter einem anderen Namen abspeichern?)
Sind die format und quality Flags richtig? Laut Hilfe soll man defaultmäßig 0,-1 nehmen, aber auch für das andere bekomme ich keine Fehlermeldung vom Compiler.
Gespeichert wird trotzdem nie was. Warum???
-
Ginsengelf
- Beiträge: 79
- Registriert: 2. Mai 2007 10:21
-
bassjupp2oo8
- Beiträge: 47
- Registriert: 17. Juli 2008 09:45
aha
Hm, das weiß ich nicht.
Nehme jetzt das Trolltech Beispiel "Scribble" unter die Lupe. Das könnte weiter helfen... mal sehen.
Nehme jetzt das Trolltech Beispiel "Scribble" unter die Lupe. Das könnte weiter helfen... mal sehen.
einfach aus dem "mainWidget" ein Pixmap rendern:
http://doc.trolltech.com/4.4/qpixmap.html#grabWidget-2
In deinem Fall ist noch unbedingt die Warnung in der Doku zu beachten...
http://doc.trolltech.com/4.4/qpixmap.html#grabWidget-2
In deinem Fall ist noch unbedingt die Warnung in der Doku zu beachten...
-
bassjupp2oo8
- Beiträge: 47
- Registriert: 17. Juli 2008 09:45
bedeutung?
was macht die Funktion "gradWidget" denn?
Kann mir auf deutsch nichts darunter vorstellen.
Verstehe daher die Warnung auch nicht.
Hilfe!!!
Kann mir auf deutsch nichts darunter vorstellen.
Verstehe daher die Warnung auch nicht.
Hilfe!!!
-
Ginsengelf
- Beiträge: 79
- Registriert: 2. Mai 2007 10:21
Moin,
grab = schnappen, greifen
grabWidget() zeichnet ein Widget so, wie es auf dem Bildschirm angezeigt werden würde, in ein QPixmap.
Die Warnung sagt dir, dass beim Aufruf von grabWidget() der PaintEvent aufgerufen wird, der grabWidget() aufrufen würde, das wieder den PaintEvent aufruft, und so weiter.
Ginsengelf
grab = schnappen, greifen
grabWidget() zeichnet ein Widget so, wie es auf dem Bildschirm angezeigt werden würde, in ein QPixmap.
Die Warnung sagt dir, dass beim Aufruf von grabWidget() der PaintEvent aufgerufen wird, der grabWidget() aufrufen würde, das wieder den PaintEvent aufruft, und so weiter.
Ginsengelf