Interpretieren des Pixel-Arrays in einer 1-bpp-BMP-Datei

Viktor Nonov

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) Geben Sie hier die Bildbeschreibung ein

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?

Adrian McCarthy

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.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Speichern des numpy-Arrays zeilenweise in einer txt-Datei

Speichern des numpy-Arrays zeilenweise in einer txt-Datei

Wie lese ich Pixel aus einer PNG-Datei?

Speichern des FileSystemInfo-Arrays in einer Datei

Achsenargument zu .loc (), um die übergebenen Slicer auf einer Achse zu interpretieren = 1

Byte-Shift beim Schreiben einer BMP-Datei

Ausrichtung einer BMP-Datei: aufrecht oder verkehrt herum?

Lesen des Byte-Arrays aus einer Datei in Ziel C.

Dynamisches Zuweisen eines Arrays von Ganzzahlen, Speichern in einer Datei und Ermitteln des Durchschnitts in c

C - Erstellen Sie mit fwrite eine bin-Datei des Arrays einer Struktur innerhalb des Arrays einer anderen Struktur

Problem beim Speichern des 3D-Arrays in einer Datei

Fehler beim Schreiben einer BMP-Datei

Wie kopiere ich nur einen Teil des Arrays, um es in einer mex-Datei auszugeben?

Ruby on Rails: Druckt das Element des Arrays in einer einzelnen Zeile in der Datei html.erb

So speichern Sie bmp (Bild) in einer Datei

Fehlerbehebung beim Auffüllen des assoziativen Arrays aus einer durch awk generierten tabulatorgetrennten Datei

Interpretieren einer neuen Zeile \ n Zeichen beim Lesen aus einer Datei mit fread in r

Anzeige einer sehr großen 1bpp-Bitmap in C #

Speichern des Inhalts eines zweidimensionalen c # -Arrays in einer CSV-Datei

Speichern des Gerätekontexts eines Screenshots in einer BMP-Datei

Interpretieren einer XDL Deadlock-Datei

Verhindern Sie, dass Pandas 'NA' als NaN in einer Zeichenfolge interpretieren: csv-Datei

Laden einer Datei mit Arrays

Interpretieren des Entscheidungsbaums in Python

Interpretieren einer als zwei Arrays gegebenen Antwort

Laden Sie eine ID2D1Bitmap aus einer .bmp-Datei

Wie kann ich Spaltenwerte mit dem Inhalt einer Datei aktualisieren, ohne sie zu interpretieren?

So interpretieren Sie DB-Volume-Einträge in einer Docker-Compose-Datei

Variable in einer anderen interpretieren

TOP Liste

heißlabel

Archiv