Metadaten in BMP unterbringen

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 7337
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy
Kontaktdaten:

Metadaten in BMP unterbringen

Beitrag von Krishty »

Hi,

Ich muss ein paar Metadaten in einer Bitmap-Datei unterbringen … im Grunde reicht schon ein einziges Byte, aber Platz zur Erweiterung würde nicht schaden. Die Frage ist nun, wo ich die Daten hinschreiben soll, ohne die Kompatibilität zu anderen Programmen zu brechen. Es gibt zwei Möglichkeiten:
  • a) Zwischen Informationsblock und Bilddaten darf ungenutzter Platz folgen.
    b) Nach den Bilddaten darf ebenfalls Freiraum folgen, bevor die Datei endet.
Die erste Möglichkeit ist ein klein wenig attraktiver, weil ich dort eh Freiraum einbaue, damit die Pixel 16-Byte-aligned sind. Die eigentliche Frage ist nun aber: Gibt es Bildprogramme, die diesen Platz schon anderweitig interpretieren? Sollte ich den Daten eine Magic Number o.ä. voranstellen? Gibt es vielleicht Sammlungen, in denen ich nachschlagen kann, was es für nonstandard-Extensions für Bitmaps gibt?

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 20:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von Aramis »

Nö, afaik gibt es da keine 'Sammlung'.

Ich denke auch nicht dass es sinnvoll ist in einer BMP-Datei Metadaten unterbringen zu wollen. Lieber eine gleich benannte XML-Datei im Verzeichnis. Das Ausdehnen von Standards (selbst wenn laut Spezifikation legal) ist niemals eine gute Lösung. Ich sage es deswegen, weil ich mich in Assimp seit Monaten mit Exportern herumärgere die solche Spielchen in der einen oder anderen Form treiben.

BMP ist sowieso kritisch. Das Format erlaubt eine ganze Menge (z.B. mehrere Bildebenen oder RLE/PNG/JPG-Kompression), de-facto unterstützen die meisten Loader aber nur ganz normale 8/16/24Bit Bitmaps. Da wäre ich dementsprechend vorsichtig Metadaten unterzubringen, und wenn nur am Dateiende.

Aufgrund der Formatunsicherheit ist BMP imho sowieso ein ungeeignetes Bildformat. Lieber DDS, PNG, (EXR), ...
Benutzeravatar
Krishty
Establishment
Beiträge: 7337
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von Krishty »

Danke für die Antwort :)
Aramis hat geschrieben:Lieber eine gleich benannte XML-Datei im Verzeichnis.
Würde ich gerne tun, aber der Loader muss auf Streams anwendbar sein, was soviel bedeutet wie dass er überhaupt nicht weiß, ob die Daten in einer einzelnen Datei liegen und ob die überhaupt einen Namen hat, also auch keine weitere Datei öffnen kann.
Aramis hat geschrieben:Das Ausdehnen von Standards (selbst wenn laut Spezifikation legal) ist niemals eine gute Lösung.
Ja, das stimmt. Allerdings besteht dort ein grundsätzlicher Konflikt: Die Spezifikation schreibt ungenutzten Platz grundsätzlich vor, klärt aber nicht, wie der aussehen soll. Rein theoretisch müsste es für die Loader also keinen Unterschied machen, ob da Nullen stehen, zufälliger Müll oder meine Metadaten. Kritisch wird es nur, wenn dort auch andere Programme nonstandard-Daten erwarten :/
Aramis hat geschrieben:BMP ist sowieso kritisch. Das Format erlaubt eine ganze Menge (z.B. mehrere Bildebenen oder RLE/PNG/JPG-Kompression), de-facto unterstützen die meisten Loader aber nur ganz normale 8/16/24Bit Bitmaps. Da wäre ich dementsprechend vorsichtig Metadaten unterzubringen, und wenn nur am Dateiende.
Ich benutze nur die gängige und relativ einfache Version 3, also keine PNG-/JPEG-Kompression, nur eine Ebene usw.
Aramis hat geschrieben:Aufgrund der Formatunsicherheit ist BMP imho sowieso ein ungeeignetes Bildformat. Lieber DDS, PNG, (EXR), ...
Ich bevorzuge PNG überall wo es geht, wo Daten aber schnell geschrieben werden müssen (Debug-Ausgaben, Kontrollergebnisse usw.) ist BMP unverzichtbar.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dowhilefor
Moderator
Beiträge: 173
Registriert: 27.02.2009, 16:44
Alter Benutzername: 6SidedDice
Echter Name: Nico Probst
Wohnort: Bochum
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von dowhilefor »

wo Daten aber schnell geschrieben werden müssen (Debug-Ausgaben, Kontrollergebnisse usw.) ist BMP unverzichtbar.
Da würde ich irgendwie immer zu TGA greifen :) Glaube da gibts aber auch keine möglichkeit der Metadaten.
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
Benutzeravatar
Krishty
Establishment
Beiträge: 7337
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von Krishty »

Ist TGA nicht noch komplexer zu schreiben? Zumindest erscheint es mir nach Wikipedia so … und da mein Lieblingsbildbetrachter „Paint“ keine TGAs unterstützt fällt es für mich von vornherein weg :D
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Helmut
Establishment
Beiträge: 231
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von Helmut »

Krishty hat geschrieben:
Aramis hat geschrieben:Aufgrund der Formatunsicherheit ist BMP imho sowieso ein ungeeignetes Bildformat. Lieber DDS, PNG, (EXR), ...
Ich bevorzuge PNG überall wo es geht, wo Daten aber schnell geschrieben werden müssen (Debug-Ausgaben, Kontrollergebnisse usw.) ist BMP unverzichtbar.
Bist du dir da sicher? Ich meine bei mir war es so, dass jpg/png schneller als bmp war, schlicht und einfach weil das Schreiben auf die Festplatte der Flaschenhals ist, nicht das bisschen CPU Zeit für die Kompression.

Ciao
Benutzeravatar
Krishty
Establishment
Beiträge: 7337
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von Krishty »

Helmut hat geschrieben:Bist du dir da sicher? Ich meine bei mir war es so, dass jpg/png schneller als bmp war, schlicht und einfach weil das Schreiben auf die Festplatte der Flaschenhals ist, nicht das bisschen CPU Zeit für die Kompression.
Mein PNG-Writer ist noch nicht auf dem neuesten Stand, darum kann ich es nicht benchen … momentan dauert außerdem das Konvertieren der Bilddaten in ein ausgabefähiges Format rund dreimal so lange wie das eigentliche Schreiben der Datei auf die Festplatte … hast aber natürlich Recht, ich sollte nicht aus den Augen verlieren, wo eigentlich mein Flaschenhals liegt.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Zudomon
Establishment
Beiträge: 2139
Registriert: 25.03.2009, 08:20
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von Zudomon »

Du könntest die Informationen auch direkt im Bild verstecken. Wenn du unkomprimierte BMPs benutzt, dann wird es sicher niemanden auffallen, wenn du von manchen Pixeln ein Bit für deine Informationen verwendest. Dadurch könnte das Bild weiterhin von jedem Programm gelesen werden und du hättest relativ viel Speicherbandbreite zur Verfügung.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 20:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von Aramis »

Oder du nimmst 32Bpp-Bitmaps und verwendest diesen Pseudo-Alphakanal. Die meisten Bildbetrachter sollten damit klarkommen bzw. ihn ignorieren. Wie auch immer, es bleibt imho eine schlechte Idee :twisted:
Benutzeravatar
Krishty
Establishment
Beiträge: 7337
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von Krishty »

Zudomon hat geschrieben:Du könntest die Informationen auch direkt im Bild verstecken.
Verlustfrei - 1 Bit = verlustbehaftet ;) Nein, das geht schon allein deshalb nicht, weil dann jedes Bild aus einem Drittprogramm, das zufällig die richtigen Bits gesetzt hat, falsch geladen würde.
Aramis hat geschrieben:Oder du nimmst 32Bpp-Bitmaps und verwendest diesen Pseudo-Alphakanal. Die meisten Bildbetrachter sollten damit klarkommen bzw. ihn ignorieren.
Der vierte Kanal ist genauso ungenutzter Platz wie das Padding vor den Pixeln, unterscheidet sich aber durch zwei Details: Zum einen kostet er erheblich Speicherplatz und zum zweiten weiß ich von Photoshop, dass er auch tatsächlich ausgewertet wird.
Aramis hat geschrieben:Wie auch immer, es bleibt imho eine schlechte Idee :twisted:
Ist aber leider unumgänglich … ich habe mal die zehn Bytes nach den Headern vollgeschrieben und teste gerade, ob Drittprogramme Probleme damit haben … Bildvorschau, Paint, Paint.NET, Gimp und der DDS Viewer schonmal nicht … aber solche Probleme kommen ja immer dann, wenn man sie nicht erwartet.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dowhilefor
Moderator
Beiträge: 173
Registriert: 27.02.2009, 16:44
Alter Benutzername: 6SidedDice
Echter Name: Nico Probst
Wohnort: Bochum
Kontaktdaten:

Re: Metadaten in BMP unterbringen

Beitrag von dowhilefor »

Ist TGA nicht noch komplexer zu schreiben?
Also

|Header|
|Data|

find ich nicht kompliziert zu schreiben. 1 Struct, byte aligned natürlich ... 2 Write Operationen und du hast TGAs geschrieben. Dasselbe in Grün beim auslesen. BMP hab ich mir seitdem nie angeguckt.
Mein Gehirn besteht nur noch aus einem hash-index, ich weiss was ich kenn aber kenn nicht was ich weiss
Antworten