读取单色bmp的有关问题

读取单色bmp的问题
代码
case 1://读取单色bmp
fread(&gray, sizeof(char), 1, file);
for (int k = 0; k < 8; k++)
{
c = gray & 0x80;
if (c == 0x80) c = RGB(255,255,255);
else c = 0;
SetPixel(hdc, x + i++, y + height - j, c);
gray=gray << 1;
}
i--;
break;

gray是unsigned char;这段代码读取某些单色bmp时会出现问题,显示很乱,但有些bmp是可以正常显示的
------解决思路----------------------
1. SetPixel那一行要不要考虑换行的情况?我不懂bmp格式,它会不会在同一个字节里保存不同行的像素?
比如,如果是一个7*7的bmp,那么第一个字节的8位里面有7位是第一行的,剩下1位是不是下一行的?
2. 我没看懂为什么要i--,可能和其余的代码相关吧。
3. 这一行没必要  else c = 0; c的取值只有0x80和0两个可能。不过这个不会造成错误,就是浪费一点时间而已。

------解决思路----------------------
应该是坐标的计算问题,SetPixel(hdc, x + i++, y + height - j, c); 中都没有出现过k,这很不合理。
------解决思路----------------------
关键是楼主不知道bmp文件的每行数据所占字节数必须是4的倍数。我猜。