Info: Win32-API-Hilfe
Code:
typedef struct tagBITMAPINFO { // bmi
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
typedef struct tagBITMAPINFOHEADER{ // bmih
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
Farbtabelle beginnt ab:
pColor = ((LPSTR)pBitmapInfo + (WORD)(pBitmapInfo->bmiHeader.biSize));
Beim unkomprimierten Bitmap (nur diese habe ich selbst mal ausgelesen) sind die eigentlichen Daten je nach Farbtiefe ineinander gepackt: Beim monochromen Bitmap bilden jeweils 8 Pixel ein Byte, bei 16 Farben bilden 2 Pixel jeweils unteres und oberes Nibble, bei 256 Farben 1 Pixel gleich 1 Byte und bei TrueColor 24bit 1 Pixel gleich 3 Byte.
Zu beachten ist, daß bei 2, 16 und 256 Farben in den Daten jeweils der Index der Farbtabelle drinsteht, während bei TrueColor die Farbe direkt RGB-kodiert drinsteht (keine Palette).
Jede Zeile eines Bitmaps wird intern auf DWORD aufgebläht, sollte die wahre Breite kleiner als die DWORD-Grenze sein, so ist mit Nullen aufzufüllen.
Bei positiver Höhenangabe wird das DIB (device independent bitmap) von unten nach oben aufgebaut, der Nullpunkt ist die linke untere Ecke. Ist die Höhenangabe negativ, wird von oben nach unten aufgebaut und der Ursprung ist die obere linke Ecke.
Wenn noch Fragen bestehen, und die API-Hilfe nicht greifbar ist, einfach hier weiterfragen...
O Love