Seite 1 von 1

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

Verfasst: 18. November 2010 09:39
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

Verfasst: 18. November 2010 12:10
von Christian81
Dann ist wohl deine Konvertierung und/oder DB-Speicherung falsch.

Verfasst: 18. November 2010 17:08
von RavenIV
warum schreibst Du das Bild nicht als BLOB in die Datenbank?
was willst Du mit der Konvertierung erreichen?

Verfasst: 18. November 2010 18:49
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.

Verfasst: 10. Dezember 2010 10:33
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

plugin

Verfasst: 10. Dezember 2010 11:00
von softwaremaker
für jpg brauchst du das jpeg-plugin -> Forensuche hilft.
png kann qt ohne plugin

Verfasst: 10. Dezember 2010 13:00
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