bmp图像像素数计算对齐

规定的,规定BMP文件的像素数据是按行存储的,而且每行的字节数必须为4的倍数,如果实际的像素数据不是4的倍数咋办?这就需要字节对齐,对齐是在一行的末尾添0以补足一行的字节数为4的倍数,
( biWidth*biBitCount+31)/32*4*biHeight//其中 biWidth是图像的宽度以像素为单位,biBitCount是每个像素的位数,如黑白图像(不是灰阶的,要么黑色要么白色)为1个像素1位,16色是4位,真彩色是24位
......biHeight是指图像的高度
( biWidth*biBitCount+31)/32*4是得出一行的实际要多少字节.乘以biHeight就是总的大小了
下面就来举例讲解是怎样对齐的(到达4的倍数):
biWidth=1
biBitCount=1

biWidth*biBitCount=1;还不足1字节,所以要补足4字节

1+31=32(位),
(1*1+31)/32=1,注意这里为什么要除以32?是因为4字节=32位,换个角度则是总共要多少个4字节,
最终一行字节数为:1*4=4字节,
biWidth=52
biBitCount=1
biWidth*biBitCount=52*1=52

(52*1+31)/32=2 每行要2个4个字节
最终要多少还要乘以4,即:
2*4=8,即当宽度为52像素,每像素要1位存储时,每行要8个字节
再来:
biWidth=111
biBitCount=24//即真彩色
biWidth*biBitCount=111*24=2664(位)

2664/(4*8)=2664/32=83 余8位,肯定不能把这8位丢掉不存储吧,其实目的就是要把这8位的末尾添加24个0装满32位(即4字节),所以:
(biWidth*biBitCount+31)/32=(2664+31)/32=2695/32=84(4字节),即要84个4字节存储,所以最终还要乘以4:
(biWidth*biBitCount+31)/32*4=84*4=336(字节)

.....................................
注意这里不能把31写成32,如果写成32则会出错如:
biWidth=32
biBitCount=1
(biWidth*biBitCount+32)/32*4=64/32*4=8本来只需要4个字节,结果为8了

肯定也不能小了比如30,那么当:
biWidth=1
biBitCount=1
(biWidth*biBitCount+32)/32*4=0肯定不对了,

还要注意的就是,
(biWidth*biBitCount+31)/32*4不能写成(biWidth*biBitCount+31)/8,原因就是因为'/'是取整的意思

所以:(biWidth*biBitCount+31)/32*4 不等于 (biWidth*biBitCount+31)/8,不信你举个例子试试.

记住:(biWidth*biBitCount+31)/32 是关键,表示需要多少个(4字节),把这个结果再乘以4结果肯定是4的倍数了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值