在介绍这个算法之前先了解一下取整运算.
两个整型变量a=14,b=5;
舍余取整: a/b=2
进一取整:(a+b-1)/b=3
Windows规定四个字节为一个字节单元,位图的相邻两行数据不能共用一个字节单元,在构造位图时,若每行的字节单元没有使用完,要以0填充.
所以,在知道位图的像素宽度情况下,读取位图色彩数据也要满足每行读取的数据是四字节的整数倍.
位图行四字节对齐算法:
第一种表示方法:
LineByte = [(biWidth * biBitCount + 7) / 8 +3 ])/ 4 * 4
第二种表示方法:
LineByte = (biWidth * biBitCount + 31) /32 *4
LineByte :每行所占的字节
biWidth : 图片像素宽度
biBitCount :像素深度,1bit,4bit,8bit…
biWidth * biBitCount :未填充时一行数据所占的位数
(biWidth * biBitCount+7) / 8 :未对齐时一行数据所占的字节数
[(biWidth * biBitCount + 7) / 8 +3 ])/ 4 :对齐时一行数据所占的字节单元(4Byte)数
(biWidth * biBitCount + 31) /32 :对齐时一行数据所占的字节单元(4Byte)数
为什么会有+7,+3,+31,开头我已经讲的很清楚了.