制作纯位图结构BITMAPINFOHEADER感

制作纯位图结构BITMAPINFOHEADER感

问题描述:

我在一个较低的水平,我不是很舒服已经:)制作纯位图结构BITMAPINFOHEADER感

反正工作扫描应用程序,我想弄明白数字我获得。

这里,我们去:

    200 DPI,B/W
  1. 决议
  2. 扫描Letter尺寸的文件来达到1700x2200
  3. 我计算1700x2200 = 3740000位或467500个字节
  4. 当我得到BITMAPINFOHEADER它说biSizeImage = 475200.为什么?
  5. 我用BITMAP返回字节数组的代码片段返回475248个字节,这个字节多了48个字节。但是biSize说40,所以如果头是40,那为什么48字节在图像数据前面?

基本上,我不明白为什么计算467500和475200之间的区别是BITMAPHEADER?

我也不明白为什么标题说它是40字节,但实际上它是48?我只是猜测它是8字节的彩色信息?由于图像是2色(B/W) - 每个颜色使用4个字节?

编辑

这里是信息:

enter image description here

认为我得到它。当扫描行保存在内存中时,必须包含4个字节。 因此,根据我的计算,1700位是212.5字节,根据我的看法 - 它使用216个字节。所以,这是有道理的。

+0

发布图片的文件共享服务,使每个人都可以检查你的假设。 –

BITMAPINFOHEADER确实是40字节大小。请记住,位图由BITMAPINFO结构表示,而不是BITMAPINFOHEADER结构。 BITMAPINFOBITMAPINFOHEADER结构后立即包含可选的RGBQUAD调色板。

1700x2200将作为位图使用1位的像素,即,它是一单色位图是374万个像素,这将占用467500个字节。您的位图在标题和像素数据之间有一个额外的8个字节,并且与单色位图一致,因为调色板将包含2个RGBQUAD值。您必须考虑BITMAPINFOHEADER::biBitCount字段,因为它会告诉您每个像素实际使用了多少位以及调色板的使用方式。

附加字节被占由每个扫描线在端部填充到上DWORD边界对齐。 biSizeImage在这种情况下,计算公式为:

biWidth = 1700 
biCount = 1 
biHeight = 2200 
biSizeImage = ((((((biWidth * biCount) + 31)/32) * 32)/8) * biHeight) = 475200 
+0

是的,这部分很清楚。这是单色图像。但为什么biSizeImage说我们都计算了475200而不是467500?如果我devide推测像素行 - 它高达212.5字节,我得到的实际大小是216个字节 – katit

+0

可以显示所有的'BITMAPINFOHEADER'的其他值? –

+0

刚刚编辑了更多细节 – katit