首页 > 解决方案 > 谁能解释一下 RowSize 和 PixelArraySize 在 BMP 文件格式中的含义?

问题描述

我正在编写用于读取 BMP 图像文件的代码,但我无法理解它们的含义RowSizePixelArraySize操作,这两个公式是否用于将行填充为 4 字节的倍数?谁能帮我理解这一点?非常感谢!

在此处输入图像描述

在此处输入图像描述

标签: image-processingpixelbmp

解决方案


正如公式正下方的图片中所解释的那样,RowSize表示单个图像行大小(以字节为单位) ,四舍五入(填充)到最接近的 4 倍数。出于性能原因(内存对齐),通常应用此填充。

该公式显示了 2 种计算方法RowSize填充为 4 个字节:

  1. ceil(BitsPerPixel * ImageWidth / 32) * 4- 以位为单位取行大小,除以 32(即 4 个字节),四舍五入然后乘以 4 得到字节数

  2. floor((BitsPerPixel * ImageWidth + 31) / 32) * 4- 以位为单位取行大小,加 31,除以 32(即 4 个字节),向下舍,然后乘以 4 得到字节数

可以看到这两种方式是等价的。

版本 2 通常是首选,因为整数运算中的舍入是隐式发生的:

int BitsPerPixel, ImageWidth;
. . .
int RowSize = ((BitsPerPixel * ImageWidth + 31) / 32) * 4; // Voila.

现在,PixelArraySize只是RowSize行数的倍数。


推荐阅读