看到网上不少帖子介绍BMP图像行像素数需要是4的倍数,毫无疑问对于任何颜色数BMP位图,这个条件都是成立的,但是在黑白位图中,行像素数仅仅以4的倍数来补位,生成或读取的BMP图像却不一定正确。因为单色BMP图像一个二进制位表示一个像素,因此行像素数不足8的时候会被自动补充成为一个完整的字节,因此在读取单色的BMP图像时需要注意对补位部分的程序进行特殊处理。各颜色位数的BMP图像文件容量的计算公式总结如下:
黑白:文件头(14字节)+信息头(40字节)+2个调色板(共8字节)+Height(图像高度)*(Width+8-Width%8)/8
16色:文件头(14字节)+信息头(40字节)+16个调色板(共64字节)+Height(图像高度)*(Width+4-Width%4)/2
256色:文件头(14字节)+信息头(40字节)+256个调色板(共1024字节)+Height(图像高度)*(Width+4-Width%4)
16位色:文件头(14字节)+信息头(40字节)+Height(图像高度)*(Width+4-Width%4)*2 (由于每个像素由两个字节表示)
24位色:文件头(14字节)+信息头(40字节)+Height(图像高度)*(Width+4-Width%4)*3 (由于每个像素由三个字节表示)
注:BMP文件的结构一般由14个字节的BITMAPFILEHEADER,40个字节的BITMAPINFOHEADER ,调色板组成、数据组成。16位(不含)以下的位图需要调色板索引得到像素RGB分量,调色板为一组RGBQUAD的结构体组成,其中,单色图有2个RGBQUAD,4位色有16个,8位色有256个。