Image Datenformart

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Tyll
User
Beiträge: 21
Registriert: Dienstag 6. August 2013, 12:52

Ich bekomme Bilddaten von einem Stream.
Diese Daten können, immer unterschiedliche Formate und Codecs, haben.
Das Problem mit verschiedenen Codecs (H264, theora ...) umzugehen habe ich bereits gelöst!

Jetzt habe ich nur noch das Problem das,das Format entweder bgr8 oder rgb8 ist, qt bietet aber nur eine direkte Umwandlung in RGB.
Siehe http://doc.qt.digia.com/qt-maemo/qimage.html -> Member Type Documentation

Umwandlung und Umgang mit den formaten habe ich so gemacht.
Liste mit den Formaten:
img_format_table = {'bgr8': QImage.Format_RGB888, 'mono8': QImage.Format_Indexed8, 'rgb8': QImage.Format_RGB888}
Umwandlung der Bilddaten in ein "Bild" :
picture = QImage(self.__imageData.data,self.__imageData.width,self.__imageData.height,format)

Um jetzt aus den bgr Daten wieder rgb Daten zu gibt es die Funktion QImage.rgbSwapped().

Ich weiß nun nicht welches Format empfangen wird und da bei der Umwandlung der Daten automatisch das richtige Format ausgewählt wird, weiß ich nicht um welches Format(bgr oder rgb) es sich handelt und somit nicht wann ein QImage.rgbSwapped() durchgeführt werden müsste, um ein korrektes Bild zu erhalten.

Gibt es eine Möglichkeit heraus zu finden welches Format beim verwendet umwandeln verwendet wir, oder welches Format meine Daten besitzen ?
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Ohne jetzt wirklich mit QImages schon gearbeitet zu haben gibt dir die Methode format() auf einem QImage ein Integer zurück, den du dann auswerten kannst:
http://qt-project.org/doc/qt-4.8/qimage ... ormat-enum

Code: Alles auswählen

In [1]: from PyQt4.QtGui import QImage
In [2]: image = QImage("test.png")
In [3]: image.format()
Out[3]: 4
Tyll
User
Beiträge: 21
Registriert: Dienstag 6. August 2013, 12:52

So wie du es dir gedacht hast, würde es nicht funktioniert, da in diesem Fall immer das gleiche Format herauskommen würde nämlich -> 13(RGB...).

Aber ich habe das Problem bereist selber gelöst.
Man kann sich ganz einfach mit Daten.encoding den Datentyp ausgeben lassen.
Hatte es sogar schon verwendet aber vollkommen übersehen -.-

http://www.tutorialspoint.com/python/string_encode.htm
BlackJack

@Tyll: Der Link in dem Beitrag macht keinen Sinn. Zeichenkettenkodierung ist etwas ganz anderes als was Du hier gerade machen willst. Und wenn Dein Datenobjekt tatsächlich eine `encoding`-Methode oder Attribut hat, dann hätte Dir bei der Frage hier auch niemand helfen können, weil wir ja gar nicht wissen wie dieser Datentyp aussieht.
Antworten