我是这个领域的新手,我对某些术语感到困惑!
bisizeimage , bisize 和 bfsize !
请为每个人定义一个简单的定义,是否有计算它们的公式?
bisizeimage bisize bfsize bitmapinfoheader bitmapfileheader
编辑:("由朋友回答")
biSize>结构所需的字节数。 (究竟是什么结构?)
结构是struct BITMAPINFOHEADER。这是一个固定值。
biSizeImage>图像的大小(以字节为单位)。 bfSize>位图文件的大小(以字节为单位)。 (图像和位图文件有什么区别?)
biSizeImage是整个图像大小,bfSize是相同的,但你必须添加2个头文件的大小。
答案 0 :(得分:8)
{{1}}
答案 1 :(得分:5)
@Roman Abashin的回答有一个轻微但重要的错误。 biSize不是两个标头的总和。
biSize是仅BITMAPINFOHEADER的大小。它是40个字节。
bfOffBits = 54
两个标头的总大小实际上是 bfOffBits (您可以将“ Off”看作是指实际位图与标头开头之间的偏移量-记住,位图是直的在标题之后)。
bfSize = biSizeImage + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
bfSize = biSizeImage + sizeof(BITMAPFILEHEADER) + biSize
bfSize = biSizeImage + 14 + 40
bfSize = biSizeImage + 54
bfSize = biSizeImage + bfOffbits
因此,以下所有都是 bfSize 的正确公式:
{{1}}
@Roman Abashin的 biSizeImage 公式(实际位图的大小)对于24位位图是正确的。
令人困惑的是,biSize,bfOffBits,bfSize和biSizeImage都以字节为单位,而 biWidth和biHeight以像素为单位。每个像素的字节数在标题的biBitCount部分中定义。对于24位位图,它是3个字节(或24位)。
请注意,bfOffBits的单位以字节为单位,biBitCount的单位以位为单位。
可以在Microsoft的页面上找到更多详细信息:
编辑:我在下面的位图概述中添加了一些注释,以进一步阐明问题 编辑:将biSizeImage + 24(等)更改为+ 14。
答案 2 :(得分:1)
@ Shock451答案中的一个小错字。 根据:https://en.wikipedia.org/wiki/BMP_file_format,交换了BITMAPFILEHEADER和BITMAPINFOHEADER的值。
应该有:
// since BITMAPFILEHEADER = 14 and BITMAPINFOHEADER = 40
不
// since BITMAPFILEHEADER = 40 and BITMAPINFOHEADER = 14
答案 3 :(得分:1)
bfSize 是位图图像的完整文件大小,位图图像的文件大小由两部分组成:
因此,我们有以下结构
bfSize = bfOffBits + biSizeImage
此外, bfOffBits (标题部分)可以进一步细分为
因此,它也可以写成
bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + biSizeImage
由于(按今天的BMP定义), BITMAPFILEHEADER 的大小恰好是14个字节, BITMAPINFOHEADER 的大小恰好是40个字节,因此也可以写为
bfSize = 14 + 40 + biSizeImage
或
bfSize = 54 + biSizeImage
然而,这将是不好的做法,因为硬编码的“魔术数字”通常不受欢迎。
但是让我们看看 biSizeImage 。一般来说,图像本身的文件大小由颜色深度 * 宽度 * 高度组成。 24位BMP中的颜色深度为每像素3个字节(蓝色,绿色,红色分别为0-255个值) - 所谓的RGB三元组。专家的其他信息:三种颜色的值按蓝色,绿色,红色的顺序保存 - 搜索关键字LittleEndianness以获取有关该主题的更多信息。如果图像的宽度不能被4个字节分割,则BMP标准还将0添加为填充。
正如其他人指出的那样,有点令人困惑的是,你现在必须将大小的像素与深度(以字节为单位)相乘。因此,我们有
biSizeImage = (biWidth * sizeof(RGBTRIPLE) + padding) * abs(biHeight)
将为您提供图像的最终字节大小。
所以,总结一下:
A nice overview of the structure of a BMP can be found here
编辑:添加了更正(感谢@MotherBrain)