使用GetDIBits获取图片数据时遇到的问题

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;

如果不写上面红色标注的部分,编译也可以通过,但就是图片发生错位,且颜色也不正确

你可能感兴趣的:(使用GetDIBits获取图片数据时遇到的问题)