Seite 1 von 1

QImage save funktioniert nicht auf anderen Rechnern

Verfasst: 28. Juli 2010 13:20
von Blubb
Hallo,

In meinem Programm speichere ich eine QGraphicsscene als Bild ab. Das funktioniert auch sehr gut auf meinem Entwicklungsrechner aber leider nicht auf allen anderen.

Ich habe bereits die plugins qgif4.dll, qjpeg4.dll und qtiff4.dll hinzugefügt und QApplication::addLibraryPath aufgerufen mit dem richtigen Pfad zu den libs. Nun funktioniert das laden der Bilder auf den anderen Rechnern aber das speichern schlägt immer fehl.

Qt gibt mir als supported Types:
bmp, jpeg, jpg, png, ppm, tif, tiff, xbm, xpm
Die Stelle wo gespeichert wird ist hier:

Code: Alles auswählen

QPainter *painter = new QPainter();
QRectF rect = scene->itemsBoundingRect();
 
QImage *image = new QImage(rect.size().toSize(), QImage::Format_ARGB32_Premultiplied);
 
painter->begin(image);
scene->render(painter);
painter->end();
 
image->save("test.jpg", "JPG");
 
delete painter;
delete image;
Was mache ich falsch?

Vielen Dank für eure Hilfe.

Verfasst: 28. Juli 2010 15:09
von Christian81
Wo hast Du die Plugins hingelegt? Außerdem: Foren-Suche!

Verfasst: 28. Juli 2010 15:18
von Blubb
Forensuche und Googlesuche wurden bereits genutzt. Daher weiß ich das Plugins benötigt werden und das man sie, wenn man addLibraryPath nutzt, in Ihrem root Ordner liegen müssen. Also in diesem Fall Ordner Applikation/imageformats.

Verfasst: 28. Juli 2010 18:08
von Christian81
Visual Studio oder MinGW?
Was sagt der Dependency Walker wenn Du auf dem Zielsystem ein Plugin anschaust (abgesehen davon dass er die Qt Dlls ggf. nicht findet).
Mehr Infos kann man z.B. in der Registry unter HKCU/Software/Trolltech/OrganizationDefaults nachschauen ob er die Plugins überhaupt gefunden hat und ob sie ggf. (aus welchen Grund auch immer) geblacklistet sind.

Prinzipiell funktioniert es bei mir ohne Probleme wenn sie so wie Du beschrieben unter <exe-path>/imageformats liegen.

Verfasst: 28. Juli 2010 18:52
von Blubb
Ich nutze Visual Studio.

Der DepWalker zeigt nur die Qt Sachen an. In der Registry ist keine Auffälligkeit.

Die Plugins muss er irgendwie gefunden haben da ohne diese der Import der Bilder nicht funktioniert.

Verfasst: 28. Juli 2010 19:05
von franzf
Und was für einen Fehler bekommst du? Gibt es irgend was hilfreiches auf der Konsole aus?
Was ist eigentlich das exakte Symptom deines Problems?
Ansonsten sollest du weniger auf dem Heap rumhantieren. Wenn du eh nachher alles selber per delete über den Jordan schickst, verzichte doch auf das Anlegen mit new...

Code: Alles auswählen

QPainter painter;
QRectF rect = scene->itemsBoundingRect();
 
QImage image(rect.size().toSize(), QImage::Format_ARGB32_Premultiplied);
 
painter.begin(&image);
scene->render(&painter);
painter.end();
 
image.save("test.jpg", "JPG");

// brauchts nimmer
// delete painter;
// delete image;

Verfasst: 28. Juli 2010 19:23
von Blubb
Ok,
habe console aktiviert. Nun bekomme ich schon mehr Details.

Code: Alles auswählen

QPainter::begin: Paint device returned engine == 0, type: 3;
QPainter::save: Painter not active
QPainter::setClipRect: Painter not active
QPainter::restore: Unbelanced save/restore
.
.
.
.QPainter::end: Painter not active, aborted

Verfasst: 28. Juli 2010 20:01
von Christian81
entweder ist rect.size() 0 oder es gibt noch kein QApplication - Object.

Verfasst: 28. Juli 2010 20:09
von Blubb
rect gab irgend nen Mist zurück. Habe mal probeweise, da ich die größe des bildes kenne, hardcoded die größe reingeschrieben und es geht. So ein simpler Fehler :?

Danke für die Hilfe!