我这里使用的是底层C语言,求取8位bmp文件中每个像素点的像素值。
1280 * 1024的8位bmp文件由位图文件头、位图信息头、调色表、颜色数据四部分组成。
位图文件头占14个字节,主要包括文件类型与大小等。
位图信息头占40个字节,主要包括位图宽、高和颜色位数等。
调色表占1024个字节,8位图的调色表主要包含2^8 = 256种颜色,每种颜色由BGRA(蓝、绿、红、保留位)四个元素组成,即256 * 4 =1024个字节。
颜色数据(DIB)扫描是从下到上,从左到右的,也就是一幅图先绘制底部的像素,在绘制顶部的像素,在8位bmp图里,每个像素点只有一个表示灰阶的值(0-255),所以无需配置每个像素点的RGB颜色,每个像素点由一个字节表示像素值。
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
typedef unsigned int DWORD; // 4bytes
typedef unsigned short WORD; // 2bytes
typedef signed long LONG; // 4bytes
typedef unsigned char BYTE; // 1bytes
#pragma pack(push)
#pragma pack(1)// 修改默认对齐值
/*位图文件文件头结构体*/
typedef struct tagBITMAPF