为了比较windows下图像处理保存的bmp图片有效数据和其他平台处理出来的raw数据的差异,借此机会,解析学习下BMP文件格式。
首先QQ截取一张8乘8的纯蓝色(截取过程显示蓝色值170,经过winhex发现大片的AA,00,00)由此知道qq截图的存储是交错存储,不过是不是RGB顺利还有待考证(因为之前不同平台下存储RGB甚至RGBA的顺利不一定,另外图像处理库的读写也支持多种读写顺序),题外话了。
在编译器工具链或者Windows系统头文件里很容易找到wingdi.h,里面定义了解析BMP文件数据的相关结构。
在解析接下来的bmp文件是需要注意,x86下是小端存储,因此用winhex分析时候需要格外注意(这也就大概造成原本RGB通道变成BGR通道的原因——小端存储)。
在注释部分以地址:数据十六进制:数据十进制的格式分析关键部分含义,参照winhex的截图。
一、BMP文件头
typedef struct tagBITMAPFILEHEADER {
WORD bf