bmp图像大小计算方式

以一个例子来学习BMP图像大小计算方式。

假设图像为95 * 100(单位为像素),位深度bitCount =1

首先计算图像每行字节数,直接95 * 1/8肯定是不行的,因为这没有考虑内存对齐。由于Windows在进行行扫描的时候最小的单位为4个字节,所以我们以4字节为单位计算图像的每行字节数,即width * bitCount/32,95 * 1/32 = 2(DWORD),这样算出来的结果就是以4字节为单位,windows进行行扫描的时候就不会出现扫描不到一整个4字节的情况,然而这样还是有问题的,它是一种向下取整,会损失像素信息,95 * 1%32=31,这31比特,不到4字节的信息就没被存储。所以我们要向上取整,小于4字节的部分用4字节存储,多余的部分用0填充就是内存对齐了,向上取整的方式为(width*bitCount+31)/32,这样就能达到向上取整的效果,(95 * 1+31)/32 =3(单位为DWORD,以4字节为单位进行存储,不到4字节的部分也用4字节存储,如果像素信息填不满4字节,剩下的用0填充。刚刚多余了31bit现在就是用第3个4字节进行存储,填不满第3个4字节,那么剩余的部分用0填充),最后,我们再在结果后面乘以一个4,把DWORD转化为Byte:(width * bitCount + 31) / 32 * 4,所以该例子的行字节数就是12字节。所以最终求行字节数的公式就是:

LineBytes = (width * bitCount + 31) / 32 * 4

那么求整张图像的大小的公式就是:

ImageSize = (width * bitCount + 31) / 32 * 4*Height

你可能感兴趣的:(图像处理,c++,图像处理,opencv,halcon)