bfSize是位图图像的完整文件大小,位图图像的文件大小由两部分组成:
- 一个头部部分(包含有关文件的一般信息 = bfOffBits)
- 和图像部分(存储像素信息的地方 = biSizeImage)
因此,我们有以下结构:
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)
这将为您提供图像的最终字节大小。
因此,总之:
- biSizeImage = BMP图像部分的文件大小(以字节为单位)
- biSize = BMP头信息部分的文件大小(以字节为单位)
- bfsize = 完整BMP文件的文件大小(包括头和图像本身)
这里提供了关于BMP结构的良好概述。
编辑:添加更正(感谢@MotherBrain)