2015-11-02 59 views
0

我有一个.bmp文件理解.bmp文件

我有点理解,有点不明白。我知道前14个字节是我的Bitmapfileheader。我还明白,我的Bitmapinfoheader也包含有关位图的信息,并且大约有40个字节(在版本3中)。

我不明白的是,信息如何存储在那里。 我有此图像: enter image description here

为什么所有的颜色信息都存储在“FF”中?我知道“00”是“垃圾字节”。我不明白的是为什么“FF”中有所有内容?

此外,我不明白是什么类型的“编码”是? 42 4D等于做“BM”。那是什么?如何将我在那里看到的内容翻译成颜色或字母或数字?

我能在这种情况下阅读:

BITMAPFILEHEADER

前2个字节。 BM如果它是.bmp文件:42 4D = BM(但是42 4D转换为BM)

Next 4字节:位图的大小。 BA 01 00 00.不知道应该是多大。

Next 4字节:保留一些东西。

下一个4个字节:偏移(不太明白)

BITMAPINFOHEADER

下一个4个字节:该BITMAPINFOHEADER的大小。 6C 00 00 00在这里。

Next 4字节:.bmp的宽度。 0A 00 00 00.我知道自从创建该文件后,它必须是10px。

Next 4字节:.bmp的高度。 0A 00 00 00.我知道自从创建该文件后,它必须是10px。

Next 2字节:来自其他文件格式的内容。

接下来的两个字节:颜色深度。 18 00 00 00.我认为只能通过1,2,4,8,16,24,32?

+0

'BMP'文件有不同的子格式。但是在标题中会有多少颜色等级的参数。您是否仔细研究了所有标题参数以及它们的含义,并且意味着如何表示其余数据? – lurker

+0

@lurker我添加了一些信息 – Stophface

+0

字节排序是小尾数。所以'BA 01 00 00'是十六进制'000001BA',它是442(十进制)。任何代表大小或其他单一值(而不是像素)的多字节值都需要这样解释。第二个例子中的颜色深度是十六进制'00000018',它是24(十进制)位。在你的第二个例子中,头部的大小是十六进制'0000006C',或者十进制的108. – lurker

回答

1

您看到“42 4D”的前两个字节是我们所说的幻数。它们是文件的签名,42 4d是二进制文件01000010 01001101的十六进制表示法。 每个文件都有一个,.jpg,.gif。你懂了。

这里是一个图像,说明一个54字节的BMP完整标题(24位BMP)。

BMP Header

的BMP的总大小是由报头的大小计算+ BMP.width X BMP.height * 3(1个字节用于红色,绿色1个字节,用于蓝1个字节 - 在每通道8位信息的情况)+填充(如果存在)。

您参考垃圾字节,被填充,需要它们如果每个扫描线(行)的大小不4.

白色的以十六进制表示法如果ffffff的倍数,为所述第一两个红色,绿色和蓝色。 而在十进制表示法中,每个通道将具有值255,因为2^8(8位)-1 = 255。

希望这会为您清除一点(非意图的双关语)。