Seite 1 von 1
Bild zeichnen und abpeichern, wie???
Verfasst: 8. August 2008 08:52
von bassjupp2oo8
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!
Verfasst: 8. August 2008 09:18
von bassjupp2oo8
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???
Verfasst: 8. August 2008 10:43
von Ginsengelf
Moin, du lädst das Bild ja anscheinend aus einer Resource-Datei. Ich glaube aber nicht, dass du dahin auch wieder zurückschreiben kannst.
Ginsengelf
edit: Resource-Datei meint in diesem Fall, dass die Bilder durch den rcc in der .exe eingebunden sind.
aha
Verfasst: 8. August 2008 10:59
von bassjupp2oo8
Hm, das weiß ich nicht.
Nehme jetzt das Trolltech Beispiel "Scribble" unter die Lupe. Das könnte weiter helfen... mal sehen.
Verfasst: 8. August 2008 13:07
von solarix
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...
bedeutung?
Verfasst: 12. August 2008 10:42
von bassjupp2oo8
was macht die Funktion "gradWidget" denn?
Kann mir auf deutsch nichts darunter vorstellen.
Verstehe daher die Warnung auch nicht.
Hilfe!!!
Verfasst: 13. August 2008 07:51
von Ginsengelf
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