2015-04-02 80 views
0

我正在使用单色位图图像,每像素1位。单色位图(1 bbp)填充和额外0xF0字节

当我用十六进制编辑器检查文件时,我注意到每行都以下面的十六进制序列结尾: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像素然后n_nbPaddingBytes = 3

问题2:

除了衬垫(00 00 00),我对每3个字节填充前述本F0字节行。它会在图像的右侧产生4个像素的黑色垂直线。注意1:在将图像打印到Zebra打印机(我垂直翻转图像并还原颜色:基本上黑色像素变成白色,反之亦然)之前,我正在操作图像。注意2:当我用Paint打开原始的BMP图像时,它的右侧没有这样的黑色垂直线。

是否有任何理由为什么这个字节0xF0出现在每行的末尾?

谢谢你的帮助。 此致敬礼。

回答

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调色板为白色)。

+0

谢谢你的回答。真?填充的字节数可以是一个浮点数?所以我想我提出的算法是不正确的,是吗? – 2015-04-02 11:03:49

+1

不,我计算有效的填充字节 - 你的100像素占据100位= 12 1/2字节,所以我写了大约3.5 – MBo 2015-04-02 11:09:25