Aufgaben:Aufgabe 5.8: BMP-Format: Unterschied zwischen den Versionen
(5 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
[[Datei:P_ID1855__Dig_A_5_8a.png|right|frame|Foto „Sonnenuntergang”]] | [[Datei:P_ID1855__Dig_A_5_8a.png|right|frame|Foto „Sonnenuntergang”]] | ||
− | Ein Bitmap ist ein Bildformat, bei dem die einzelnen Pixel (von <i>Picture Elements</i>) in Matrixform abgespeichert werden. Der Header einer solchen BMP–Datei umfasst mindestens 54 Byte, bestehend aus dem Dateikopf (in Hexadezimaldarstellung von 0x00 bis 0x0D) sowie dem Informationsblock ab 0x0E. Anschließend folgen die Bilddaten, bei Farbbildern mit den Farbkomponenten R – G – B. | + | Ein Bitmap ist ein Bildformat, bei dem die einzelnen Pixel (von <i>Picture Elements</i> ) in Matrixform abgespeichert werden. Der Header einer solchen BMP–Datei umfasst mindestens 54 Byte, bestehend aus dem Dateikopf (in Hexadezimaldarstellung von 0x00 bis 0x0D) sowie dem Informationsblock ab 0x0E. Anschließend folgen die Bilddaten, bei Farbbildern mit den Farbkomponenten R – G – B. |
Der nachfolgende Hexdump beschreibt das Foto „Sunset.bmp”. Dargestellt sind die ersten und letzten 96 der insgesamt 176456 Byte in Hexadezimaldarstellung. | Der nachfolgende Hexdump beschreibt das Foto „Sunset.bmp”. Dargestellt sind die ersten und letzten 96 der insgesamt 176456 Byte in Hexadezimaldarstellung. | ||
[[Datei:P_ID1857__Dig_A_5_8b_version2.png|center|frame|Hexdump zu Sunset.bmp]] | [[Datei:P_ID1857__Dig_A_5_8b_version2.png|center|frame|Hexdump zu Sunset.bmp]] | ||
− | Der '''Dateikopf''' beinhaltet folgende Informationen (der Präfix 0x zeigt die Hexadezimaldarstellung an): | + | Der '''Dateikopf''' beinhaltet folgende Informationen (der Präfix „0x” zeigt die Hexadezimaldarstellung an): |
* 0x00 ... 0x01 (2 Byte) BMP–Kennung: 0x 42 4D ⇒ „BM”, | * 0x00 ... 0x01 (2 Byte) BMP–Kennung: 0x 42 4D ⇒ „BM”, | ||
* 0x02 ... 0x05 (4 Byte) Dateigröße in Byte, | * 0x02 ... 0x05 (4 Byte) Dateigröße in Byte, | ||
Zeile 16: | Zeile 16: | ||
− | Diese Angaben gelten nur für den Intel–Prozessor, der nach der <i>Little–Endian–Byteanordnung</i> vom niederwertigsten (LSB) zum höchstwertigen (MSB) Byte liest. Die Anordnung „48 B1 02 00” der Bytes 2 | + | Diese Angaben gelten nur für den Intel–Prozessor, der nach der <i>Little–Endian–Byteanordnung</i> vom niederwertigsten (LSB) zum höchstwertigen (MSB) Byte liest. Die Anordnung „48 B1 02 00” der Bytes 2 bis 5 ist somit als „0x 00 02 B1 48” zu interpretieren, was der Dezimalzahl 176456 entspricht. |
Der '''40 Byte–Informationsblock''' beinhaltet folgende Werte: | Der '''40 Byte–Informationsblock''' beinhaltet folgende Werte: | ||
Zeile 33: | Zeile 33: | ||
− | '' | + | |
+ | |||
+ | |||
+ | |||
+ | ''Hinweis:'' | ||
* Die Aufgabe gehört zum Kapitel [[Digitalsignal%C3%BCbertragung/Anwendungen_bei_Multimedia%E2%80%93Dateien| Anwendungen bei Multimedia–Dateien]]. | * Die Aufgabe gehört zum Kapitel [[Digitalsignal%C3%BCbertragung/Anwendungen_bei_Multimedia%E2%80%93Dateien| Anwendungen bei Multimedia–Dateien]]. | ||
− | + | ||
Zeile 45: | Zeile 49: | ||
$\rm Höhe \hspace{0.3cm} = \ $ { 210 } $\ \rm Pixel $ | $\rm Höhe \hspace{0.3cm} = \ $ { 210 } $\ \rm Pixel $ | ||
− | {Wie groß ist die Farbtiefe in | + | {Wie groß ist die Farbtiefe in „bit per pixel” $\rm (BPP)$? |
|type="{}"} | |type="{}"} | ||
$\rm Farbtiefe \ = \ $ { 24 } $\ \rm BPP $ | $\rm Farbtiefe \ = \ $ { 24 } $\ \rm BPP $ | ||
Zeile 53: | Zeile 57: | ||
$\rm vertikale \ Auflösung \ = \ $ { 97 3% } $\ \rm dpi $ | $\rm vertikale \ Auflösung \ = \ $ { 97 3% } $\ \rm dpi $ | ||
− | {Wieviele Byte ( | + | {Wieviele Byte $(N_{\rm Info})$ umfasst hier der Informationsblock? Ab welchem Byte $\rm (Offset)$ beginnen die Bilddaten? |
|type="{}"} | |type="{}"} | ||
+ | $\rm Offset \ = \ $ { 54 } $\ \rm Byte $ | ||
$N_{\rm Info} \hspace{0.38cm} = \ $ { 176402 1% } $\ \rm (dezimal) $ | $N_{\rm Info} \hspace{0.38cm} = \ $ { 176402 1% } $\ \rm (dezimal) $ | ||
− | |||
{Wie lauten die Dezimalwerte der Farbkomponenten des linken oberen Pixels? | {Wie lauten die Dezimalwerte der Farbkomponenten des linken oberen Pixels? | ||
Zeile 68: | Zeile 72: | ||
===Musterlösung=== | ===Musterlösung=== | ||
{{ML-Kopf}} | {{ML-Kopf}} | ||
− | '''(1)''' Die Bildbreite (im Bereich 0x12 ... 0x15) hat den Hexadezimalwert 0x118 (Dezimalwert 280). Entsprechend | + | '''(1)''' Die Bildbreite (im Bereich 0x12 ... 0x15) hat den Hexadezimalwert 0x118 (Dezimalwert 280). |
+ | *Entsprechend hat die Bildhöhe (im Bereich 0x16 ... 0x19) den Hexadezimalwert 0x00D2 ⇒ 210 Pixel. | ||
+ | *Einzugeben sind jeweils die Dezimalwerte <u>280</u> (Breite) und <u>210</u> (Höhe). | ||
Zeile 74: | Zeile 80: | ||
− | '''(3)''' | + | |
+ | '''(3)''' Die vertikale Auflösung findet man im Bereich 0x2A ... 0x2D. Sie beträgt 0x 0E EA = 3818 Pixel pro Meter. | ||
+ | *Mit der angegebenen Längenumrechnung ergibt sich daraus 3818 · 0.0254 <u>≈ 97 dpi</u> (dots per inch). | ||
+ | *Die horizontale Auflösung (Bereich 0x26 ... 0x29) ist ähnlich, aber nicht gleich: 0x0EC3 ⇒ 3779 · 0.0254 ≈ 96 dpi. | ||
+ | |||
− | '''(4)''' Bei 24 BPP (Farbtiefe) hat der Informationsblock die minimale Größe 0x28 = 40d, da dann keine Farbinformation in Tabellenform angegeben wird. Der Offset beträgt unter Berücksichtigung der 14 Byte für den Dateiheader 0x36 <u>= 54 Byte</u>. Das erste Datenbyte liegt somit bei 0x36. | + | '''(4)''' Bei 24 BPP (Farbtiefe) hat der Informationsblock die minimale Größe 0x28 = 40d, da dann keine Farbinformation in Tabellenform angegeben wird. |
+ | *Der Offset beträgt unter Berücksichtigung der 14 Byte für den Dateiheader 0x36 <u>= 54 Byte</u> (Offset). Das erste Datenbyte liegt somit bei 0x36. | ||
− | Die Größe der Bitmap (im Bereich 0x22 ... 0x25) beträgt | + | *Die Größe der Bitmap (im Bereich 0x22 ... 0x25) beträgt 0x 02 B1 12 = 176402d. Dieser Wert ist um <u>54</u> (Dateikopf) kleiner als die Dateigröße. Dieser Wert setzt sich wie folgt zusammen: |
− | :$$280 \cdot 210 \cdot 3 + 2 \hspace{0.15cm}\underline {= 176402} .$$ | + | :$$N_{\rm Info} = 280 \cdot 210 \cdot 3 + 2 \hspace{0.15cm}\underline {= 176402} .$$ |
− | Hierbei berücksichtigt die „2” die beiden Abschlussbytes (00 00), wie aus dem Hexdump auf der Angabenseite zu ersehen ist. | + | *Hierbei berücksichtigt die „2” die beiden Abschlussbytes (00 00), wie aus dem Hexdump auf der Angabenseite zu ersehen ist. |
− | '''(5)''' Die Bilddaten werden zeilenweise von rechts unten nach links oben mit jeweils | + | '''(5)''' Die Bilddaten werden zeilenweise von rechts unten nach links oben mit jeweils drei Byte abgespeichert. Die Farbwerte des linken oberen Punktes sind somit |
− | + | :: <i>R</i> = 0x28 <u>= 40d</u>, | |
− | + | :: <i>G</i> = 0x52 <u>= 82d</u>, | |
− | + | :: <i>B</i> = 0x73 <u>= 115d</u>. | |
− | Beachten Sie hierbei wieder die <i>Little–Endian–Byteanordnung</i> des Intelprozessors, so dass | + | Beachten Sie hierbei wieder die <i>Little–Endian–Byteanordnung</i> des Intelprozessors, so dass „R – G – B” tatsächlich in der Reihen „B – G – R” angeordnet werden. |
{{ML-Fuß}} | {{ML-Fuß}} | ||
Aktuelle Version vom 26. März 2019, 17:28 Uhr
Ein Bitmap ist ein Bildformat, bei dem die einzelnen Pixel (von Picture Elements ) in Matrixform abgespeichert werden. Der Header einer solchen BMP–Datei umfasst mindestens 54 Byte, bestehend aus dem Dateikopf (in Hexadezimaldarstellung von 0x00 bis 0x0D) sowie dem Informationsblock ab 0x0E. Anschließend folgen die Bilddaten, bei Farbbildern mit den Farbkomponenten R – G – B.
Der nachfolgende Hexdump beschreibt das Foto „Sunset.bmp”. Dargestellt sind die ersten und letzten 96 der insgesamt 176456 Byte in Hexadezimaldarstellung.
Der Dateikopf beinhaltet folgende Informationen (der Präfix „0x” zeigt die Hexadezimaldarstellung an):
- 0x00 ... 0x01 (2 Byte) BMP–Kennung: 0x 42 4D ⇒ „BM”,
- 0x02 ... 0x05 (4 Byte) Dateigröße in Byte,
- 0x06 ... 0x09 (5 Byte) reserviert (muss immer mit 0 belegt sein),
- 0x0A ... 0x0D (4 Byte) Offset (Beginn der Bilddaten).
Diese Angaben gelten nur für den Intel–Prozessor, der nach der Little–Endian–Byteanordnung vom niederwertigsten (LSB) zum höchstwertigen (MSB) Byte liest. Die Anordnung „48 B1 02 00” der Bytes 2 bis 5 ist somit als „0x 00 02 B1 48” zu interpretieren, was der Dezimalzahl 176456 entspricht.
Der 40 Byte–Informationsblock beinhaltet folgende Werte:
- 0x0E ... 0x11 (4 Byte) Länge des Info–Blocks,
- 0x12 ... 0x15 (4 Byte) Bildbreite in Pixel,
- 0x16 ... 0x19 (4 Byte) Bildhöhe in Pixel,
- 0x1A ... 0x1B (2 Byte) Anzahl der Farbebenen (immer auf 1 gesetzt),
- 0x1C ... 0x1D (2 Byte) Bits per Pixel (BPP),
- 0x1E ... 0x21 (4 Byte) Art der Datenkomprimierung,
- 0x22 ... 0x25 (4 Byte) Größe der Bitmap in Byte,
- 0x26 ... 0x29 (4 Byte) Horizontalauflösung in Pixel/Meter,
- 0x2A ... 0x2D (4 Byte) Vertikalauflösung in Pixel/Meter,
- 0x2E ... 0x31 (4 Byte) Anzahl der verwendeten Farben,
- 0x32 ... 0x35 (4 Byte) Anzahl der wichtigen Farben.
Hinweis:
- Die Aufgabe gehört zum Kapitel Anwendungen bei Multimedia–Dateien.
Fragebogen
Musterlösung
- Entsprechend hat die Bildhöhe (im Bereich 0x16 ... 0x19) den Hexadezimalwert 0x00D2 ⇒ 210 Pixel.
- Einzugeben sind jeweils die Dezimalwerte 280 (Breite) und 210 (Höhe).
(2) Die Farbtiefe beträgt 24 BPP (hexadezimal 0x18), wie im Bereich 0x1C ... 0x1D angegeben.
(3) Die vertikale Auflösung findet man im Bereich 0x2A ... 0x2D. Sie beträgt 0x 0E EA = 3818 Pixel pro Meter.
- Mit der angegebenen Längenumrechnung ergibt sich daraus 3818 · 0.0254 ≈ 97 dpi (dots per inch).
- Die horizontale Auflösung (Bereich 0x26 ... 0x29) ist ähnlich, aber nicht gleich: 0x0EC3 ⇒ 3779 · 0.0254 ≈ 96 dpi.
(4) Bei 24 BPP (Farbtiefe) hat der Informationsblock die minimale Größe 0x28 = 40d, da dann keine Farbinformation in Tabellenform angegeben wird.
- Der Offset beträgt unter Berücksichtigung der 14 Byte für den Dateiheader 0x36 = 54 Byte (Offset). Das erste Datenbyte liegt somit bei 0x36.
- Die Größe der Bitmap (im Bereich 0x22 ... 0x25) beträgt 0x 02 B1 12 = 176402d. Dieser Wert ist um 54 (Dateikopf) kleiner als die Dateigröße. Dieser Wert setzt sich wie folgt zusammen:
- $$N_{\rm Info} = 280 \cdot 210 \cdot 3 + 2 \hspace{0.15cm}\underline {= 176402} .$$
- Hierbei berücksichtigt die „2” die beiden Abschlussbytes (00 00), wie aus dem Hexdump auf der Angabenseite zu ersehen ist.
(5) Die Bilddaten werden zeilenweise von rechts unten nach links oben mit jeweils drei Byte abgespeichert. Die Farbwerte des linken oberen Punktes sind somit
- R = 0x28 = 40d,
- G = 0x52 = 82d,
- B = 0x73 = 115d.
Beachten Sie hierbei wieder die Little–Endian–Byteanordnung des Intelprozessors, so dass „R – G – B” tatsächlich in der Reihen „B – G – R” angeordnet werden.