
Dies ist der Hex-Dump eines 5x5-Bitmaps, das mit der Farbe Rot eingefärbt ist:
Meine Frage lautet: Wie ändere ich nur die Hex-Werte (ohne ein Tool wie Paint zu verwenden), um die Farbe des Bitmaps beispielsweise in Grün (0,255,0)
oder eine beliebige andere Farbe zu ändern?
Und wie konvertieren Tools wie Paint die von Ihnen gezeichneten Pixel in Hexadezimalwerte, um die Bitmap zu speichern?
Antwort1
Hier ist die Dokumentation für BMP:https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29
Die Kurzform lautet:
- 14 Byte BMP-Header (Dateiinformationen)
- 40 Byte DIB-Header (Bildinformationen)
- Pixel
Sie können im DIB-Header-Abschnitt die beiden Werte 5 für die Pixelabmessungen und einen Hex-Wert (18) für 24-Bit-Farbe (RGB) sehen.
Besonders interessant ist das „Beispiel 1“ im Wiki, das einen HEX-Dump für ein 2x2-Bild zeigt, das dem hier ähnelt. Ein paar Anmerkungen:
- ein Byte ist visuell ein zweistelliges Couplet (das erste Byte in Ihrem Bild ist 42).
- Die Zählung beginnt bei 0, daher ist „Offset 31“ das 32. Byte.
- Zahlen sind alle HEX, also hex(10) = dec(16). Sie können den Windows-Rechner im „Programmiermodus“ verwenden, wenn Sie Hilfe bei der Konvertierung benötigen.
- Die „Byte-Reihenfolge“ ist von niedrig nach hoch, daher muss ein 4-Byte-Wert von „05 00 00 00“ als „00 00 00 05“ verstanden werden.
- die RGB-Tripel im BMP sind umgekehrt
Basierend auf dem Hex-Dump und der Dokumentation speichert Ihr Bild jedes Pixel als unkomprimiertes RGB-Triplet. Das erste Pixel ist das Triplett 24 1c ed
, aber dies ist umgekehrt, also ist es hex(ed1c24), was tatsächlich eine rote Farbe ist. Beachten Sie, dass nach jeder Reihe von 5 Pixeln ein Pad vorhanden ist 00
. Laut Dokumentation dient dies der „Byte-Ausrichtung“.
Um die Farbe eines Pixels von Rot nach Blau zu ändern, könnten Sie eines der Tripel von 24 1c ed
in ändern ed 1c 24
.
Was die Software betrifft, würden Sie die Datei (oder eine Kopie) mit einem Hex-Editor öffnen, die Änderungen vornehmen und speichern. Die einfache Verwendung eines Texteditors im „Textbearbeitungsmodus“ reicht nicht aus, da das Textsymbol „0“ nicht dasselbe ist wie der binäre numerische Wert 0.
Das Open-Source-Tool Notepad++ verfügt über die Möglichkeit, Hexadezimalwerte über Plugins zu bearbeiten.
Was die größere Frage betrifft, wie Paint ein Bild erstellt, so verwendet das Programm die Dokumentation und Standards, um den Prozess zu automatisieren. Es ist hauptsächlich eine Frage der Konvention. Der „Bildstrom“ (Pixeldaten) wird im Speicher in einemähnlichWeise, wie Sie es in der unkomprimierten Bilddatei sehen.