í <--- Komische Zeichen am Anfang meines JPG-Files QT

Alles rund um die Programmierung mit Qt
Antworten
Adiboing
Beiträge: 10
Registriert: 15. Oktober 2010 09:26

í <--- Komische Zeichen am Anfang meines JPG-Files QT

Beitrag von Adiboing »

Hallo,

ich weiß komischer Titel für den Thread ;)

Also dann leg ich mal los.

Es geht grob gesagt darum das ich ein JPG in eine Datenbank schreibe. Dieses JPG wird zuvor in Hexcode convertiert. Diesen Hexcode hol ich mir dann wieder aus der Datenbank convertiere ihn zurück und erstelle ein *.jpg File und schreib den convertierten Code rein.

Nun ist mein Problem das sich automatisch 4 Zeichen am Anfang des Files anhängen wenn ich das *.jpg mittels Notepad++ anschaue.

Leider lassen sich diese 4 Zeichen nicht kopieren und hier einfügen. Alles was ich weiß das es 3 von dieser Art sind und das vierte ist exakt dieses í.

Danach kommt der richtige JPG-Code. Sprich wenn ich die 4 Zeichen lösche und das File save dann erscheint auch das Bild. Aber dieser Vorgang soll nicht zu tun sein.


Ich hab mal noch eine Funktion in mein Programm eingefügt die editJPG() lautet. Die Funktion wird ansich nicht viel bringen es geht wohl eher darum was diese Zeichen bedeuten und wo sie herkommen, aber egal.

Die Funktion sieht wie folgt aus und tut das:
Sie öffnet das JPG mit den hinzugefügten Zeichen die nicht da sein sollen.
Ließt das File aus und removed die ersten 4 Zeichen und speichert das File wieder ab.
Jedoch sind diese Zeichen wieder vorhanden. Ich bekomm sie so nicht weg nur mittels manuellem Löschen indem ich direkt in das File reingehe.

Hier der Code:

Code: Alles auswählen

void CKtGekkoLCM::editJPG()
{
	QDir *dir = new QDir;
	QByteArray line, text;

/* Get the JPG-File */
	QFile file(dir->currentPath() + "/" + nidout + ".jpg");
    if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
	{
		return;
	}

/* Read line of JPG-File and convert to Hex */
	while (!file.atEnd())
	{
        line = file.readAll().toHex().toUpper();
    }

/* Remove those wirred signs in the beginning */
	qDebug()<<"line: " << line;
	line.remove(0,8);
	qDebug()<<"lineremoved: " << line;

/* Convert from Hex to old format */
	text = QByteArray::fromHex(line);
	qDebug()<<"text: " << text;

/* Write to File */
    QTextStream saveInFile(&file);
	saveInFile << text;
	file.close();

	QTimer::singleShot(500,this,SLOT(showJPG())); 
}

Falls es jemandem Hilft. Wenn ich den JPG-Code mit Notepad++ anschaue befinden sich auf den vier Zeichen ein paar Buchstaben und sind schwarz Hinterlegt.
1. zeichen: NUL
2. zeichen: NUL
3. zeichen: SOH
4. zeichen: í


Hoffe ihr wisst was ich mein ;)

peace Adi
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dann ist wohl deine Konvertierung und/oder DB-Speicherung falsch.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

warum schreibst Du das Bild nicht als BLOB in die Datenbank?
was willst Du mit der Konvertierung erreichen?
Linux, das längste Text-Adventure aller Zeiten
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

So und jetzt betrachten wir die 4 Zeichen mal als int und vergleichen diesen Wert mit der Dateigröße der Datei.

Und ein Texteditor ist beim besten Willen nicht das richtige Tool um Binärdaten zu betrachten.
Adiboing
Beiträge: 10
Registriert: 15. Oktober 2010 09:26

Beitrag von Adiboing »

Hallo tut mir leid für die so stark verspätete Antwort.

Ich hab das Problem wie folgt gelöst.

Ich hol mir den Code aus der DB und schreib diesen direkt in ein QPixmap via der Funktion loadFromData(). Siehe hier
Im Code sieht das wie folgt aus:

Code: Alles auswählen

QPixmap image;
	if(image.loadFromData(uncompressedFile, "jpg") == true)
		this->showJPG(image);
uncompressedFile ist in diesem Fall das QByteArray mit dem Bild-Code aus der DB.

Das ganze Funktioniert auch wundervoll auf meinem Rechner. Jedoch wenn ich mein Prog bei nem anderen PC ohne QT Framework laufen lasse geht alles bis auf die Anzeige eines solchen JPGs. Und der knüller ist das es mit einem PNG bei beiden PCs funktioniert.


Somit ist meine Frage. Was hat PNG das es sich anzeigen lässt und wieso geht dies mit einem JPG nicht?

Ich hab das jetzt glaube noch nicht bewusst getestet, aber wenn ich ein JPG zu einem PNG umwandle indem ich einfach .PNG dahinter schreibe sollte es eig. auch bei beiden PCs gehen.
Im Internet wurde ich bisher leider nicht fündig. Ich hoffe jemand weiß Rat.


MFG Adi
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

plugin

Beitrag von softwaremaker »

für jpg brauchst du das jpeg-plugin -> Forensuche hilft.
png kann qt ohne plugin
Adiboing
Beiträge: 10
Registriert: 15. Oktober 2010 09:26

Beitrag von Adiboing »

Yeaah danke hat funktioniert. Auch wenn es doch noch sehr umständlich war.

Hatte die qjpeg4.dll nicht in nem imageformats Ordner und diesen nicht gelinkt. Aber nun tut alles so wie es soll ;)

fättes thanks an alle
Adi
Antworten