[solved] Bildreihe auf der Festplatte speichern

Verschiedenes zu Qt
AndiLatte
Beiträge: 104
Registriert: 13. November 2007 13:39

[solved] Bildreihe auf der Festplatte speichern

Beitrag von AndiLatte »

Bisher habe ich einzelne Bilder stets per

Code: Alles auswählen

image.save("image.png", "png",10);
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?
Zuletzt geändert von AndiLatte am 3. März 2009 15:01, insgesamt 3-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Du wirst doch wohl noch einen String für den Filenamen zusammenbasteln können.
AndiLatte
Beiträge: 104
Registriert: 13. November 2007 13:39

Beitrag von AndiLatte »

macman hat geschrieben:Du wirst doch wohl noch einen String für den Filenamen zusammenbasteln können.
scheisse, ja !!

:lol:
AndiLatte
Beiträge: 104
Registriert: 13. November 2007 13:39

Beitrag 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

pixmap.save(a, "png",10); 

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
....
chrootdev
Beiträge: 70
Registriert: 18. April 2008 17:52

Beitrag 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 
AndiLatte
Beiträge: 104
Registriert: 13. November 2007 13:39

Beitrag 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...
chrootdev
Beiträge: 70
Registriert: 18. April 2008 17:52

Beitrag von chrootdev »

Poste doch mal was du dir für einen string erwartest, und danach was

Code: Alles auswählen

std::cout << a.toStdString() << std::endl; 
ausgibt!
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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...
AndiLatte
Beiträge: 104
Registriert: 13. November 2007 13:39

Beitrag von AndiLatte »

chrootdev hat geschrieben:Poste doch mal was du dir für einen string erwartest, und danach was

Code: Alles auswählen

std::cout << a.toStdString() << std::endl; 
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
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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?
AndiLatte
Beiträge: 104
Registriert: 13. November 2007 13:39

Beitrag 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
...
..
AndiLatte
Beiträge: 104
Registriert: 13. November 2007 13:39

Beitrag 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)
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

jetzt kommen wir der Sache näher :wink:

Kann denn das Programm überhaupt auf "20090303-122500-123" schreiben? Existiert also dieses Verzeichnis relativ zum Ausführungspfad?
AndiLatte
Beiträge: 104
Registriert: 13. November 2007 13:39

Beitrag von AndiLatte »

solarix hat geschrieben:jetzt kommen wir der Sache näher :wink:

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.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

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