Ich habe vor kurzem zwei identische Bitmap-Bilder in Notepad++ geöffnet. Die Kopfzeile beginnt mit:
'Bmb' und der andere mit: 'Bm~'
Warum das?
Antwort1
Dies ist nicht der gesamte Header – und tatsächlich sind es eineinhalb Felder aus dem Header.
Hier ist das Header-Formataus Wikipedia:
Offset-Dezember | Größe | Zweck |
---|---|---|
0 | 2 Byte | Das Header-Feld, das zur Identifizierung der BMP- und DIB-Datei verwendet wird, ist hexadezimal 0x42 0x4D, dasselbe wie BM in ASCII. Die folgenden Einträge sind möglich: - BM - Windows 3.1x, 95, NT, ... usw.- BA - OS/2-Struktur-Bitmap-Array- CI - OS/2-Struktur-Farbsymbol- CP - OS/2-Konstanten-Farbzeiger- IC - OS/2-Struktursymbol- PT - OS/2-Zeiger |
2 | 4 Bytes | Die Größe der BMP-Datei in Bytes |
6 | 2 Byte | Reserviert; der tatsächliche Wert hängt von der Anwendung ab, die das Image erstellt. Bei manueller Erstellung kann er 0 sein. |
8 | 2 Byte | Reserviert; der tatsächliche Wert hängt von der Anwendung ab, die das Image erstellt. Bei manueller Erstellung kann er 0 sein. |
10 | 4 Bytes | Der Offset, d. h. die Startadresse, des Bytes, in dem die Bitmap-Bilddaten (Pixelarray) gefunden werden können. |
BM
ist der Wert des ersten Felds. Das dritte „Zeichen“ ist eigentlich das erste Byte aus dem zweiten Feld (Größe des BMP in Bytes), das fälschlicherweise als Text interpretiert wird.
Antwort2
Denn der Header ist wederBmbnochBm~. Es istBM. Ihre Bitmaps waren also doch nicht identisch.
Dies ist festgelegt in derBITMAPFILEHEADER-Struktur: „Der Dateityp muss BM sein.“
Antwort3
Im Header müssen die ersten 2 Bytes „BM“ sein, und das ist, was Sie erhalten haben.
Die nächsten 4 Bytes speichern die Größe der Datei, die in Ihrem Fall zufällig wie „P“ oder „~“ aussieht.
Sie können versuchen, die Rohbytes an den 4 Standorten zu nehmen und die Dateigröße zu berechnen. Sie sollte der Dateigröße auf der Festplatte entsprechen.
Alternativ können Sie Image Tools verwenden, um den Header zu verarbeiten, die Dateigröße zu extrahieren und dann zu vergleichen.