Ich kann das Pixelarray in der folgenden Situation nicht erklären: Ich habe mit MS Paint unter Windows 7 ein BMP-Bild mit 2 x 2 Pixel erstellt. Es wurde als monochromes BMP gespeichert (was meiner Meinung nach BMP mit einer Farbtiefe von 1 Bit pro Pixel bedeutet).
So sieht das Bild beim Zoomen aus (schwarzes Pixel, weißes Pixel, weißes Pixel, schwarzes Pixel)
Dann öffne ich den bmp mit einem Hex-Editor und sehe folgende Infos:
00: 424d 4600 0000 0000 0000 3e00 0000 2800 BMF.......>...(.
10: 0000 0200 0000 0200 0000 0100 0100 0000 ................
20: 0000 0800 0000 0000 0000 0000 0000 0000 ................
30: 0000 0000 0000 0000 0000 3f3f 3f00 3f00 ..........???.?.
40: 0000 4000 0000 0a ..@....
Soweit ich im Wikipedia-Artikel über das BMP-Format ( https://en.wikipedia.org/wiki/BMP_file_format ) gelesen habe, ist dieser Teil das Pixel-Array:
3f00 0000 4000 0000
Was bedeuten die Werte im Pixelarray? Hat der 3F-Wert eine besondere Bedeutung?
Der von Ihnen gepostete Hex-Dump entspricht nicht ganz dem von Ihnen geposteten Bild. Folgendes bekomme ich:
00000000 42 4D 46 00 00 00 00 00 00 00 3E 00 00 00 28 00 BMF.......>...(.
00000010 00 00 02 00 00 00 02 00 00 00 01 00 01 00 00 00 ................
00000020 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000030 00 00 00 00 00 00 00 00 00 00 FF FF FF 00 80 00 ................
00000040 00 00 40 00 00 00 ..@...
Die Farbtabelle beginnt bei 0x36. Dort gibt es zwei RGBQUADs. Der erste Wert, 0x00000000, entspricht Schwarz. Die nächste, 0x00FFFFFF, entspricht Weiß.
Danach beginnen die Pixeldaten. Jedes Pixel wird durch ein einzelnes Bit dargestellt. Obwohl für jede Zeile Ihres Bildes nur zwei Bits erforderlich sind, wird jede Zeile an einer 4-Byte-Grenze ausgerichtet. Somit ist die erste Zeile 0x80000000 und die zweite 0x40000000. Es ist wahrscheinlich, dass einige Anwendungen sich nicht die Mühe machen, die Füllbits zu löschen.
Die Zeilendaten werden byteweise interpretiert, vom höchstwertigen Bit bis zum niedrigsten in jedem Byte.
Die hohen Bits von 0x8 sind 1 und 0, und wir sollten Farbe 1 (weiß) gefolgt von Farbe 0 (schwarz) in dieser Reihenfolge in der unteren Reihe sehen. Der Rest der Bits wird ignoriert, da sie Pixeln jenseits der Breite von 2 entsprechen würden, da die nächsten drei Bytes nur existieren, um sicherzustellen, dass die nachfolgende Zeile an der 4-Byte-Grenze ausgerichtet ist.
Die hohen Bits von 0x4 sind 0 und 1, daher sollten wir in der nächsten Zeile Farbe 0 (schwarz) gefolgt von Farbe 1 (weiß) in dieser Reihenfolge sehen. Nach wie vor werden die restlichen Bits ignoriert.
In Ihrem Hex-Dump war die Farbtabelle schwarz (0x00000000) und grau (0x003F3F3F). Keine große Sache. Die Pixeldaten hatten hohe Bits von 0 und 0 in der ersten (unteren) Reihe und 0 und 1 in der zweiten (oberen) Reihe. Die anderen Bits sind zufälliger Müll, der zum Auffüllen verwendet wird.
(Die Tatsache, dass 0x3F dem Grauwert ähnlich ist, deutet darauf hin, dass der Encoder möglicherweise nicht die Mühe gemacht hat, eine Variable oder ein Register zu löschen, die bzw. das nach dem Schreiben der Farbtabelle wiederverwendet wurde.)
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen