P
KOR schrieb:
... was ist mit dem body(also die pixel selber ...
Das habe ich mit den Kommentaren zu erklären versucht. ( Zeile 31,37,38 )
Dieser Wert sagt dir, wohin du deinen Filepointer setzen musst, um auf den ersten Pixel zu seigen:
bfh.bfOffBits
In C würest du also in etwa so etwas hier schreiben:
fseek ( fp, bfh.bfOffBits, 0 );
Damit hast du den Dateizeiger genau auf den Beginn der Pixeldaten gesetzt.
Jetzt kannst du anfangen einzulesen.
Um zu wissen, wie viele Bytes alle deine Pixel haben, fragst du die Variable
bmih.biSizeImage
wie viele Byte sie zu bieten hat. Dem enstprechend musst du vorher Speicherplatz zur Verfügung stellen.
Manche Libs lassen diesen Wert 0, sodass du die Größe selbst berechnen musst.
Das könntest du mit
bmih.biSizeImage =
bmih.biWidth * bmih.biBitCount) + 31) & ~31) >> 3) * bmih.biHeight;
tun. Das sorgt gleichzeitig dafür, das deine Zeilen(in Byte) ein Vielfaches von 4 sind, so wie es Mircosoft gern hätte. Beim Speichern musst du ebenfalls darauf achten, das sich die Zeilen durch 4 teilen lassen, sonst zeigen die Grafikprogramme deine Bilder zerpuzzelt an, auch wenn der Inhalt stimmt.