BMP格式详细介绍链接:
BMP格式总结:
① 前14字节描述文件类型,大小,数据偏移
② 接着的40字节描述图片的大小,宽度,高度,位深度,分辨率等等
③ 位深度常见的是1,4,8,24,32。其中1表示只有黑白两种颜色,4是16色,8是256色,24是RGB形式表示的,32是在24的基础上加上透明度的RGBA表示。
④ 目前常见的彩色图片位24位或32位,8位一般为灰度图
⑤ 如果是8位图(256色),40字节的图片描述后面会有颜色表,描述图片上256种颜色的RGBA值。灰度图的第 i 种颜色的RGB值均为 i ,A值为0。
⑥由于windows默认的扫描最小单位是4字节,所以BMP格式为了能够更快地按行读取,如果每行的字节数不是4的倍数,会在后面补0直到长度为4的倍数。可以简单地得知,32位图不需要对齐。(对齐规则)
PS:如果用fread整体读入BMP文件信息和图片信息,可能由于 内存对齐 的原因,读入的信息可能存放不到内存里预期的地方,下面的代码实现种用#pragma pack(1)解决由于内存对齐产生的问题
简单的实现代码:
#include <cstdio