?
kuckuck1000 schrieb:
hmm...
Danke dir!
Aber so ganz blick ich leider noch immer nicht durch...
Die Bitmapdatei sieht so aus:
+-------------------------+-------------------------+-----------------------+
| BITMAPFILEHEADER=14byte | BITMAPINFOHEADER=40byte | Pixelwerte des Bildes |
+-------------------------+-------------------------+-----------------------+
Deine Infos stehen im BITMAPINFOHEADER.
Du legst dir nun einen Buffer an:
char buffer[54];
Und in den Buffer kopierst du die ersten 54byte der Datei rein.
Du öffnest die Datei mit fopen im Binärmodus "rb" zum Lesen.
*FILE *fopen(const char *path, const char mode);
Dann liest du mit fread den Dateiinhalt in den RAM, ptr zeigt auf deinen Buffer, size setzt du auf 1, nmemb setzt du auf die Anzahl der Byte die du einlesen willst (also 54) und stream ist die zuvor geöffnete Datei.
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
Gut, du hast nun im Buffer die nötigen Daten.
An Stelle 0x1C=28 stehen 2 Byte, die der Farbtiefe entsprechen.
Du musst noch beachten, in welcher Reihenfolge die Byte zu interpretieren sind ("Endianness"). Die Farbtiefe ist also dann:
*unsigned int farbtiefe=buffer[28]+buffer[29]256
Hier mal eine Bitmap Datei im Hex Editor geöffnet.
Wenn du die Stelle mit Offset 28 und 29 suchst, findest du dort den Wert 0x18 und 0x00, und im 10er System ist dann ganz einfach die Zahl 24, also Farbtiefe 24bit.
>od -x test.bmp
0000000 4d42 0046 0000 0000 0000 0036 0000 0028
0000020 0000 0002 0000 0002 0000 0001 0018 0000
0000040 0000 0010 0000 0b13 0000 0b13 0000 0000
0000060 0000 0000 0000 00ff ff00 ffff 0000 0000
0000100 0000 00ff 0000
Jetzt alles klar?