制作纯位图结构BITMAPINFOHEADER感
问题描述:
我在一个较低的水平,我不是很舒服已经:)制作纯位图结构BITMAPINFOHEADER感
反正工作扫描应用程序,我想弄明白数字我获得。
这里,我们去:
-
200 DPI,B/W
- 决议
- 扫描Letter尺寸的文件来达到1700x2200
- 我计算1700x2200 = 3740000位或467500个字节
- 当我得到BITMAPINFOHEADER它说biSizeImage = 475200.为什么?
- 我用BITMAP返回字节数组的代码片段返回475248个字节,这个字节多了48个字节。但是biSize说40,所以如果头是40,那为什么48字节在图像数据前面?
基本上,我不明白为什么计算467500和475200之间的区别是BITMAPHEADER?
我也不明白为什么标题说它是40字节,但实际上它是48?我只是猜测它是8字节的彩色信息?由于图像是2色(B/W) - 每个颜色使用4个字节?
编辑
这里是信息:
我认为我得到它。当扫描行保存在内存中时,必须包含4个字节。 因此,根据我的计算,1700位是212.5字节,根据我的看法 - 它使用216个字节。所以,这是有道理的。
答
BITMAPINFOHEADER
确实是40字节大小。请记住,位图由BITMAPINFO
结构表示,而不是BITMAPINFOHEADER
结构。 BITMAPINFO
在BITMAPINFOHEADER
结构后立即包含可选的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
发布图片的文件共享服务,使每个人都可以检查你的假设。 –