Image binär öffnen/speichern

Alles rund um die Programmierung mit Qt
Antworten
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Image binär öffnen/speichern

Beitrag von toem »

Hallo,
ich muss ein Image öffnen und die Daten binär in ein Textfile schreiben.
Gibt es hierzu Funktionen in QT?

Ich stell mich glaub ich ein wenig zu doof an.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Glaub wir können uns ned besser anstellen :-)
ich muss ein Image öffnen und die Daten binär in ein Textfile schreiben.
versuch mal bissi aehm präziser zu werden !
Image, was iss denn das ? nen Bilddatei ? welches Format ?? bmp,jpeg,png ??
in ne textdatei ? was soll denn da drinne stehen ? das bild binaer codiert als octets ?
Wozu genau brauchst du das, vielleicht wird daraus klar was genau du willst !

Ciao ...
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Beitrag von toem »

Ich habe die Anforderung bekommen ein Image (Tiff) zu öffnen und das Bild als Binärdatei in eine Textdatei zu speichern.

Ich habs grade so probiert:

Code: Alles auswählen

QString theData;
    QFile pic(img);
    pic.open(QIODevice::ReadOnly);
    QDataStream in(&pic);                           // read the data serialized from the file
    in >> theData;
    qDebug() << in;
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

ok, dann erklaer mal genauer, wie man eine Binaerdatei als textdatei speichert, weil davon hab ich keine Ahnung :-)

Code: Alles auswählen

QDataStream in(&pic);                           // read the data serialized from the file
    in >> theData; 
Was erwartest du wenn du versuchst Texte aus einer binären Datei zu lesen ?
Zeig mal wie die Textdatei hinterher aussehen soll ca !

Ciao ...
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Beitrag von toem »

Also jetzt mach ich das so, das müsste stimmen:

Code: Alles auswählen

QString theData;
    using namespace std;
    ifstream is;
    is.open(theImg, ios::binary);
    char ch;
    while (is.get(ch))
        theData += ch;
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Was spricht gegen

Code: Alles auswählen

QFile::copy("image.tif", "file.txt");
Dann hast du Binärdaten in nem Textfile :D
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Beitrag von toem »

Auch eine schöne Altenative, danke.

Noch ein Problem. Falls ich das ganze auf mehrere Arten (tif, bmp, etc) ausweiten möchte. Wie kann ich dann ermitteln, von welcher Art die Datei ist?
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag von Mani99 »

Bei

Code: Alles auswählen

QFile::copy("image.tif", "file.txt");
ist es QFile glaub ich ziemlich egal welches format die bilddatei hat!
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Beitrag von toem »

Das war aber nicht meine Frage.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Sicher war das die richtige Antwort. Bei einem "Copy" wird einfach auf Dateisystemebene ein Duplikat der Ursprungsdatei angelegt. Da ist es wurscht, ob das ein Bild, ein Executable oder ein SQLite-db-file ist.

Wenn du das anders implementieren willst und je nach Bildformat eine andere Methode aufrufen, ist das entweder 1) unverlässlich oder 2) aufwändig.
1) du verlässt dich darauf, dass in einem ".jpeg" auf ein JPeg-Bild drinsteckt. Also eine rein Dateiendungs-basierte Unterscheidung.
2) Du schaust in den Dateiheader, und ermittels so, welches Format das ist. Denn ein böser Bub kann dir einen Streich spielen, und ein executable als .jpeg tarnen. Du clickst drauf und "Peng".
Oder deine Bild->Text-Routine funktioniert nicht, weil aus dem Bild nur Mist rauskommt
Antworten