QImage save funktioniert nicht auf anderen Rechnern

Alles rund um die Programmierung mit Qt
Antworten
Blubb
Beiträge: 15
Registriert: 22. August 2009 10:53

QImage save funktioniert nicht auf anderen Rechnern

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wo hast Du die Plugins hingelegt? Außerdem: Foren-Suche!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Blubb
Beiträge: 15
Registriert: 22. August 2009 10:53

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Blubb
Beiträge: 15
Registriert: 22. August 2009 10:53

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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;
Blubb
Beiträge: 15
Registriert: 22. August 2009 10:53

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

entweder ist rect.size() 0 oder es gibt noch kein QApplication - Object.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Blubb
Beiträge: 15
Registriert: 22. August 2009 10:53

Beitrag 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!
Antworten