image-processing - 谁能解释一下 RowSize 和 PixelArraySize 在 BMP 文件格式中的含义?
问题描述
我正在编写用于读取 BMP 图像文件的代码,但我无法理解它们的含义RowSize
和PixelArraySize
操作,这两个公式是否用于将行填充为 4 字节的倍数?谁能帮我理解这一点?非常感谢!
解决方案
正如公式正下方的图片中所解释的那样,RowSize
表示单个图像行大小(以字节为单位) ,四舍五入(填充)到最接近的 4 倍数。出于性能原因(内存对齐),通常应用此填充。
该公式显示了 2 种计算方法RowSize
,填充为 4 个字节:
ceil(BitsPerPixel * ImageWidth / 32) * 4
- 以位为单位取行大小,除以 32(即 4 个字节),四舍五入,然后乘以 4 得到字节数floor((BitsPerPixel * ImageWidth + 31) / 32) * 4
- 以位为单位取行大小,加 31,除以 32(即 4 个字节),向下舍入,然后乘以 4 得到字节数
可以看到这两种方式是等价的。
版本 2 通常是首选,因为整数运算中的舍入是隐式发生的:
int BitsPerPixel, ImageWidth;
. . .
int RowSize = ((BitsPerPixel * ImageWidth + 31) / 32) * 4; // Voila.
现在,PixelArraySize
只是RowSize
行数的倍数。
推荐阅读
- j2ssh - 网络故障上的 J2SSH Maverick 行为
- c# - 将字符串数组列表复制到 excel 文件时的奇怪行为
- c++ - 如何在不使用 append 函数的情况下追加到 C++ 字符串?
- javascript - 为什么我的箭头函数错误为“不是函数”?
- mongodb - MongoDB 数据在 docker 容器上下移动之间不持久 [MacOSX]
- python - Python find.all [BeautifulSoup] 突然返回空
- c# - 从当前在 android 设备上播放的任何声音中获取数据?
- api - 在 SPFx 上的 MS Graph API 中转换文件返回未定义
- autodesk-forge - Forge 身份验证:如何在刷新时处理 GatewayTimeout
- python - tensorflow 和 keras:不支持无值