25.11 Das
bmp-Format |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Eine bmp-Datei beinhaltet genau ein Bild, die Farbtiefe und die Größe sind dabei frei. Die Endung bmp der Datei sorgt bei Klicken auf den Dateinamen dafür, dass bei entsprechender Verknüpfung ein Programm gestartet wird, das die Daten der Datei als Bitmap-Bild zu interpretieren sind. Das kann aber nur funktionieren, wenn in der Datei selbst einige wichtige Informatioenn über die Datei stehen. Eine korrekte bmp-Datei besitzt demnach einen Header, genauer zwei Header, einen mit Informationen über die Datei und einen über das Format des Bildes. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Header 1 | Der erste
Header (siehe unten den hellgrau unterlegten Teil der Tabelle) belegt
genau die ersten 14 byte der Datei. Die ersten beiden werden grundsätzlich
durch "BM" (=BitMap) belegt. 4216 = 6610 ist der
ASCII-Wert von B und 4D16 = 7710 ist der ASCII-Wert
von M. Die nächsten 4 Byte geben Auskunft über die Dateilänge. Das geht so
5E 04 ist die Hexadezimalzahl 045E16 = 4.162
+ 5.161 + 14.160 = 1118. Man
muss also die beiden Bytes 5E und 04 vor dem zusammenhängen vertauschen.
Schließlich dienen die letzten 4 Bytes die Position anzugeben, ab der die
Pixelinformationen stehen. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Header 2 | Im zweiten Header (dunkelgrau unterlegt) stehen Informationen über Bildmaße und Farbtiefe. Die Größe dieses Header ist variabel. An erster Stelle des zweiten Headers steht seine Länge, in unserem Fall 40 Bytes, gefolgt über die Bildbreite und Bildhöhe in Pixel, usw. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Farbpalette | Im gelb unterlegten Teil des Headers werden die im Bild benutzten Farben indiziert. Das geschieht allerdings nur, wenn das Bild eine geringere Farbtiefe hat als 15 Bit. Jeder Eintrag in diese sog. Farbpalette belegt dann grundsätzlich 4 Byte = 32 bit. Der Wert im ersten Byte legt die Intensität von Blau, das zweite die Intensität von Grün und das dritte die von Rot (umgekehrt: RGB). das letzte Byte bleibt frei, um den Zugriff von 32 Bit-Programmen (32 Bit = 4Byte) zu optimieren. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Pixel | In
unserem Beispiel beginnt die Beschreibung der Pixel ab der Adresse 107810.
Es ist das linke untere Pixel des Bildes und soll die Farbe C2 haben.
Dabei ist C216 der Index der Farbe, welche Farbe es tatsächlich
ist steht in der Farbpalette. Aus der Information aus dem Header weiß das
Programm, wann die Zeile zu Ende ist, nämlich nach 6 Pixel. Es folgen die
Pixel für den Aufbau der 2.letzten Zeile (= 4. Pixelzeile). Man erkennt an
der Position (Offset) 108810den Eintrag FF16 = 25510.
In der Farbtabelle steht beim Index 255 die Farbe FF FF FF , also volle
Farbtiefen für Blau, Gelb und Rot, was auf dem Bildschirm die Farbe weiß
ergibt. An dieser Stelle kann man sehr schön erkennen, wie die Indizierung
Platz spart. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Jetzt
verstehen wir auch, warum wir mit dem Überschreiben beim Verstecken erst
'spät' in der Datei beginnen, wir müssen nämlich sicherstellen, dass wir
die Header und die Farbpalette nicht zerstören, wir wollen ja nur einzelne
Pixel überschreiben. Unsere Methode verstecken, könnte natürlich aus der
Datei die Information auslesen, ab welcher Stelle die Pixeleinträge
beginnen, der Aufwand ist für unseren Zweck aber zu groß. So könnte man
die 'Länge' der Pixeldaten ermitteln. Mit der Länge des Textes kann man
dann den Text gleichmäßig über das Bild verteilen. Kennt man die Länge des
versteckten Textes, so kann man diesen aus dem Bild mit dem versteckten
Text, diesen wieder auslesen. Die Länge des Textes übernimmt dann die
Rolle des Schlüssels. Verehrter Leser, wollen Sie es versuchen? Die Lösung wird dann hier veröffentlicht. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Notiz: | Die
Anregung für diese Seite und das Pixel-Bild stammen von "Daniel's
Homepage" mit der URL: http://www.fh-wedel.de/~bek/c/praktika/seminar-iass02.html#gif |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
zu | 25.12 Übungen | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
zur Startseite | www.pohlig.de (C) MPohlig 2005 |