Frage

Ich versuche, Kennzeichen mit C ++ - Code zu analysieren. Es geht nicht darum, schnell dorthin zu gelangen, denn ich möchte selbst diesen C ++ - Code erstellen und lernen, wie es geht.

Problem:

Die Bytes in der Bitmap -Datei summieren sich nicht! Die Bitmap -Datei:enter image description here http://ictmdeklerk.nl/cor.bmp

Warum sie nicht addieren:

Ich verwende 24 -Bit -Bitmap -Bilder (*.bmp -Dateien). Ich weiß, dass die Bitmap mit dem BMPFileHeader und dem BmpinfoHeader konstruiert ist, den Togehter 54 Bytes verbraucht.

Jetzt ist das Bild 1350 Pixel breit und 740 Pixel hoch, was zu 999000 Pixel führt.

Da die Datei 24 Bit ist, gibt es 3 Bytes pro Pixel. 999000 * 3 = 2997000 Bytes Neccessary für das Bild. Aber die Bildgröße (Bissimage) im BmpinfoHeader sagt, dass das Bild 2998480 Bytes beträgt! Die Dateigröße beträgt 2,998.534 Bytes - 54 Header -Bytes = 2,998.480 in der Tat. Der Header ist also noch 54 Bytes. Keine zusätzlichen Meta -Daten dort. Wenn ich 2,998.480 / 3 Bytes pro Pixel teilt, bekomme ich 999493,33 Pixel! Es ist nicht einmal eine runde Nummer!

Es macht mich verrückt. Woher weiß Windows jemals, wie man dieses Bild zeigt, ohne Pixel oder Farben oder so etwas zu verschieben?

Kann mir jemand erklären, woher diese zusätzlichen Pixel/Bytes kommen? Und wie kann man mit ihnen umgehen?

Danke im Voraus!

War es hilfreich?

Lösung

BMP-Dateien pad jede Zeile zu 4-Byte-Grenzen.

Ihr Bild ist

(1350px breit) x (3 Bytes pro Pixel) = 4050 Bytes pro Zeile. 4050 ist nicht um 4, sondern 4052 teilbar ist Also werden 2 Bytes für jede Zeile (2 * 740 = 1480 Bytes) als Polsterung zu Ihrem Bild hinzugefügt.

Die Dateigröße beträgt daher 2997000 Bild Bytes + 54 Bytes Header + 1480 Bytes Zeilenpolster = 2998534 Bytes, was die tatsächliche Dateigröße ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top