【问题标题】:Incorrect bitmaps; how is this possible不正确的位图;这怎么可能
【发布时间】:2011-09-08 14:19:10
【问题描述】:

我正在尝试使用 C++ 代码分析车牌。关键不是如何快速到达那里,因为我想自己创建这个 C++ 代码并学习如何去做。

问题:

位图文件中的字节不加起来!位图文件: http://ictmdeklerk.nl/cor.bmp

为什么他们不加起来:

我正在使用 24 位图图像(*.BMP 文件)。我知道位图是用 BMPFILEHEADER 和 BMPINFOHEADER 构建的,它们总共消耗 54 个字节。

现在,图像的宽度为 1350 像素,高度为 740 像素,即 999000 像素。

因为文件是 24 位的,所以每个像素有 3 个字节。 999000 * 3 = 图像所需的 2997000 字节。但是 BMPINFOHEADER 中的图像大小(biSizeImage)表示图像是 2998480 字节!文件大小为 2.998.534 字节 - 54 头字节 = 2.998.480 确实。所以头部仍然是 54 字节。那里没有额外的元数据。当我除以 2.998.480 / 3 字节每像素时,我得到 999493,33 像素!它甚至不是一个整数!

这让我发疯了。 windows 怎么知道如何在不改变像素或颜色或其他任何东西的情况下显示此图像?

谁能解释一下这些额外的像素/字节是从哪里来的?又该如何处理?

提前致谢!

【问题讨论】:

  • 为什么不用十六进制编辑器查看文件 - 应该很容易看出 1000 左右的额外字节来自...

标签: bitmap filesize pixels image-size


【解决方案1】:

BMP 文件将每一行填充到 4 字节边界。

你的头像是

(1350 像素宽)x(每像素 3 字节)= 每行 4050 字节。 4050 不能被 4 整除,但 4052 ,因此每行 2 个字节(2 * 740 = 1480 字节)作为填充添加到您的图像中。

因此文件大小为 2997000 图像字节 + 54 字节标题 + 1480 字节行填充 = 2998534 字节,这是实际文件大小。

【讨论】:

  • +1。当我输入几乎相同的内容时,您发布了答案。
  • 哇,这是一个很好的答案,而且速度很快!那么在这种情况下,每一行我都会跳过最后两个字节?用于渲染图像?非常感谢!
  • 在这种特定的情况下,您将跳过每行的最后 2 个字节,但您可以使用类似的方法计算要跳过的字节数:int bytesToSkipPerRow = (pixels * bytesPerPixel ) % 4;
  • 是的,太好了!非常感谢大家。这解决了我的问题。现在我的图像应该会出现在我的屏幕上!下次我想我必须在认为自己头疼(并在此处发布)之前进一步调查文件格式。
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多