单色位图(1 bbp)填充和额外的0xF0字节

时间:2015-04-02 10:41:24

标签: algorithm bitmap padding bmp monochrome

我正在使用单色位图图像,每像素1位。

当我用十六进制编辑器检查文件时,我注意到每一行都以下面的十六进制序列结束:f0 00 00 00

稍微研究了一下这个问题,我得出结论,最后三个字节00 00 00对应于行填充。

问题1:

我想知道在1 bbp BMP图像的情况下,确定填充字节数的以下算法是否正确:

if(((n_width % 32) == 0) || ((n_width % 32) > 24))
{
  n_nbPaddingBytes = 0;
}
else if((n_width % 32) <= 8)
{
  n_nbPaddingBytes = 3;
}
else if((n_width % 32) <= 16)
{
  n_nbPaddingBytes = 2;
}
else
{
  n_nbPaddingBytes = 1;
}

n_width是BMP图像的宽度(以像素为单位)。

例如,如果n_width = 100 px,则n_nbPaddingBytes = 3.

问题2:

除了填充(00 00 00)之外,我在每行的三个字节填充之前都有这个F0字节。它会在图像的右侧产生4像素的黑色垂直线。

注意1:我在将图像打印到Zebra打印机之前操作图像(我正在垂直翻转图像并恢复颜色:基本上黑色像素变成白色像素,反之亦然)。

注意2:当我用Paint打开原始BMP图像时,它的右侧没有这样的黑色垂直线。

有没有理由在每行的末尾出现这个字节0xF0?

感谢您的帮助。 最好的问候。

1 个答案:

答案 0 :(得分:1)

表示位图像素的位按行打包。通过填充将每行的大小向上舍入为4个字节(32位DWORD)的倍数。

RowSize = [(BitsPerPixel * ImageWidth + 31) / 32] * 4(除法是整数)

BMP file format

宽度= 100的单色图像的行大小为16字节(128位),因此3.5字节用于填充(F0的第二个半字节和00 00 00)。 F表示右侧4列图像(白色表示通常的0/1调色板)。