Seite 1 von 2
[solved] Bildreihe auf der Festplatte speichern
Verfasst: 18. Februar 2009 14:11
von AndiLatte
Bisher habe ich einzelne Bilder stets per
gespeichert.
Jetzt möchte ich eine Reihe an Bildern speichern die sich nicht überschreiben.
Sprich alle bilder sollen etwas so 01_image.png....23_image.png usw. abgelegt werden.
wie stelle ich dies mit
bool save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
an?
Verfasst: 18. Februar 2009 14:44
von macman
Du wirst doch wohl noch einen String für den Filenamen zusammenbasteln können.
Verfasst: 18. Februar 2009 15:40
von AndiLatte
macman hat geschrieben:Du wirst doch wohl noch einen String für den Filenamen zusammenbasteln können.
scheisse, ja !!

Verfasst: 3. März 2009 10:37
von AndiLatte
Jetzt habe ich etwas geändert und es werden mir an der Konsole die Strings angezeigt, jedoch werden die Images nicht mit den erstellten String nicht auf die Platte geschrieben.
Was ist falsch an
Code: Alles auswählen
....
QString str = QString("%1_%2").arg(fileName).arg(counter);
int q = 21 + log10(counter)+1; // String Laenge
const QString a = str.right(q); // String schneiden
counter++;
std::cout << a.toStdString() << std::endl;
pixmap.save(a, "png",10); // speichert kein Image
....
Verfasst: 3. März 2009 11:12
von chrootdev
AndiLatte hat geschrieben:
Code: Alles auswählen
int q = 21 + log10(counter)+1; // String Laenge
const QString a = str.right(q); // String schneiden
Wofür ist denn das gut?
Wenn du das weglässt, dann sollte der string so aussehen wie du das gerne hättest!
Code: Alles auswählen
QString str = QString("%1_%2").arg(fileName).arg(counter);
counter++;
pixmap.save(str, "png",10); // speichert kein Image
Verfasst: 3. März 2009 11:25
von AndiLatte
chrootdev hat geschrieben:AndiLatte hat geschrieben:
Code: Alles auswählen
int q = 21 + log10(counter)+1; // String Laenge
const QString a = str.right(q); // String schneiden
Wofür ist denn das gut?
Ich übergebe einen Pfad und schneide den Ordnernamen(mit der Charlänge 21) in dem ein Videofile steckt heraus. Ich speicher jede Sekunde ein Bild und hänge die Nummer des Frames an. Damit um FAll counter Anzahl 4 nicht zb 4 Charstellen angehängt werden sondernn nur eine nehme ich log10. das +1 war nur optional...
Verfasst: 3. März 2009 12:13
von chrootdev
Poste doch mal was du dir für einen string erwartest, und danach was
ausgibt!
Verfasst: 3. März 2009 12:14
von solarix
Code: Alles auswählen
QString str = QString("%1_%2").arg(fileName).arg(counter);
...
pixmap.save(a, "png",10); // speichert kein Image
1. du pruefst den Return-Wert ja gar nicht... also : "qDebug() << pixmap.save(a, "png",10);"
2. du bist dir schon bewusst, dass nach dem erfolreichen Speichern deine Dateien keine Endung haben (du gibst ja keine mit).. im Windoof-Explodierer sollten da also lauter Dateien ohne ".png" rumliegen... in einem "Oeffnen"-Dialog (gefiltert auf "*.png") sind jedoch garantiert keine sichtbar...
Verfasst: 3. März 2009 12:26
von AndiLatte
chrootdev hat geschrieben:Poste doch mal was du dir für einen string erwartest, und danach was
ausgibt!
jjjjmmtt-ssmmss-nnn/_x
zb. nur einen videofile von heute stünde
20090303-122500-123/_1
ujd als image sollte dann:
20090303-122500-123/_1.png
gespeichert werden
Verfasst: 3. März 2009 12:29
von solarix
AndiLatte hat geschrieben:
20090303-122500-123/_1
ujd als image sollte dann:
20090303-122500-123/_1.png
gespeichert werden
hast du eigentlich mein post gelesen?
Verfasst: 3. März 2009 12:33
von AndiLatte
solarix hat geschrieben:
hast du eigentlich mein post gelesen?
ja hab ich. die konsole zeigt wie geschrieben den string:
20090303-122500-123/_1
20090303-122500-123/_2
20090303-122500-123/_3
....
..
..
20090303-122500-123/_13
...
..
Verfasst: 3. März 2009 12:38
von AndiLatte
solarix hat geschrieben:Code: Alles auswählen
QString str = QString("%1_%2").arg(fileName).arg(counter);
...
pixmap.save(a, "png",10); // speichert kein Image
1. du pruefst den Return-Wert ja gar nicht... also : "qDebug() << pixmap.save(a, "png",10);"
2. du bist dir schon bewusst, dass nach dem erfolreichen Speichern deine Dateien keine Endung haben (du gibst ja keine mit).. im Windoof-Explodierer sollten da also lauter Dateien ohne ".png" rumliegen... in einem "Oeffnen"-Dialog (gefiltert auf "*.png") sind jedoch garantiert keine sichtbar...
zu 1.) ergibt wie erwartet "false"
zu 2.) ich habe noch ein .arg(".png") angehängt jedoch wurde auch nix gespeichert. was zu vermuten war denn ich habe ja noch nichts erfolgreich gespeichert (weder mit noch ohne endung)
Verfasst: 3. März 2009 12:44
von solarix
jetzt kommen wir der Sache näher
Kann denn das Programm überhaupt auf "20090303-122500-123" schreiben? Existiert also dieses Verzeichnis relativ zum Ausführungspfad?
Verfasst: 3. März 2009 13:02
von AndiLatte
solarix hat geschrieben:jetzt kommen wir der Sache näher
Kann denn das Programm überhaupt auf "20090303-122500-123" schreiben? Existiert also dieses Verzeichnis relativ zum Ausführungspfad?
das ist nicht das Problem, denn
"pixmap.save("image.png", "png",10);" funzt und legt das jeweils letzte Image an gewünschter Position ab. Überschreibt eben....
pixmap.save(y, "png",10); funzt nich
es geht rein um den/die Namen der png Datei, dessen String hier das Problem ist.
Verfasst: 3. März 2009 13:11
von solarix
du übergibst "save()" ja nicht nur ein Dateiname, sondern auch ein Verzeichnis ("/" ist Trennzeichen für Verzeichnisse.. unabhängig vom BS (
http://doc.trolltech.com/4.4/qfile.html#setFileName)). Bei diesem relativen Pfad muss aber das Verzeichnis (in deinem Fall "20090303-122500-123") schon existieren... deshalb nochmals die Frage: existiert dieses Verzeichnis denn?