通用做法:
lpDIB为指向位图的指针。
先获取颜色数:
WORD DIBNumColors(LPBYTE lpDIB)
{
WORD wBitCount; // DIB bit count
DWORD dwClrUsed;
dwClrUsed = ((LPBITMAPINFOHEADER)lpDIB)->biClrUsed;
if (dwClrUsed)
return (WORD)dwClrUsed;
wBitCount = ((LPBITMAPINFOHEADER)lpDIB)->biBitCount;
// return number of colors based on bits per pixel
switch (wBitCount)
{
case 1:
return 2;
case 4:
return 16;
case 8:
return 256;
default:
return 0;
}
}
//再获取调色板大小:
WORD PaletteSize(LPBYTE lpDIB)
{
// calculate the size required by the palette
return (DIBNumColors(lpDIB) * sizeof(RGBQUAD));
}
最后获取指向数据的指针:
LPBYTE FindDIBBits(LPBYTE lpDIB)
{
return (lpDIB + *(LPDWORD)lpDIB + PaletteSize(lpDIB));
}