1. LPVOID 参数和 LPBITMAPINFO 参数的关系
这两个参数在MSDN上没有详细说明,其实这两个参数是有关系的,他们要共用同一段内存区。
LPBITMAPINFO 参数和 LPVOID 参数相差的字节距离为:sizeof(BITMAPINFOHEADER)+dwPaletteSize
其中, dwPaletteSize 是颜色表的容量。
请注意下面的写法:
GetDIBits(hDC, hBitmap, 0, bi.biHeight,(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,(LPBITMAPINFO)lpbi, DIB_RGB_COLORS);
2. 图片错位
// 获取该调色板下新的像素值
int count=GetDIBits(hDC, hBitmap, 0, bi.biHeight,(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,(LPBITMAPINFO)lpbi, DIB_RGB_COLORS);
m_pImage=(BYTE *)((LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize);
m_pBmi=(LPBITMAPINFO)lpbi;
如果不写上面红色标注的部分,编译也可以通过,但就是图片发生错位,且颜色也不正确