我发现位图提供了以下属性。
{biSize = 40, biWidth = 3, biHeight = -3, biPlanes = 1, biBitCount = 24, biCompression = 0, biSizeImage = 36, biXPelsPerMeter = 2834, biYPelsPerMeter = 2834, biClrUsed = 0, biClrImportant = 0}
我的问题是为什么它的biSizeImage不是3 * 3 * 3 = 27?
答案 0 :(得分:0)
biSizeImage:图像的总大小,以字节为单位,包括像素和填充。
你有biWidth = 3像素, biBitCount = 24 bitperpixel(8bits = 1byte)
所以你的图像宽度: 3pix *(24/8)bytesperpixel = 9个字节 9个字节不是4的倍数,所有bmp文件的行宽必须是4的倍数。
所以最接近的数字4x是12个字节。 这意味着在每一行中,您将添加3个字节的零0x00 0x00 0x00。
现在总大小将是: 3pix *(每像素3字节)+填充3字节=每行12字节 每行12个字节* 3行= 36个字节 希望这可以帮助。 ž
答案 1 :(得分:0)
问题在于: http://cdn.cs50.net/2015/x/psets/4/hacker4/hacker4.html
但是原始的海报并没有意识到上面的信息并没有处理后来在帖子中引用的3x3 bmp,而是在该信息中引用了8x8 bmp。在这种情况下:
8(width)*8(height)*3(bytes/pixel) = 192
然后为头文件添加54个字节= 246。
此答案与 bfSize 相关, bfSize 是OP认为上述信息引用的整个位图的大小。
相反,OP引用的40个字节实际上是 biSize ,属于BITMAPINFOHEADER。此变量引用此标头结构本身所需的字节数。