BMP图像文件格式深入解析

BMP图像文件格式深入解析

BMP(Bitmap)是微软Windows系统采用的一种标准图像文件格式,它能够存储无压缩的位图图像,支持多种颜色深度,包括1位、4位、8位、16位、24位和32位。由于其结构简单、无损保存,BMP格式在图像处理、软件开发和计算机图形学中仍有重要应用。本文将全面解析BMP文件的结构、存储方式及特点。

BMP文件结构

一个BMP文件由四个主要部分组成:

  • 文件头(Bitmap File Header):包含文件类型、大小和图像数据偏移等信息。
  • 信息头(Bitmap Info Header):描述图像的尺寸、颜色深度、压缩类型等属性。
  • 调色板(Color Palette):可选部分,用于索引颜色模式。
  • 像素数据(Pixel Data):实际存储图像像素的字节序列。

文件头详解

文件头大小为14字节,包含以下字段:

  • bfType(2字节):固定值'BM'(0x424D)。
  • bfSize(4字节):文件总大小。
  • bfReserved1/2(各2字节):保留,通常为0。
  • bfOffBits(4字节):从文件头开始到像素数据的偏移量。

信息头详解

信息头有多个版本,最常见的是BITMAPINFOHEADER(40字节)。关键字段包括:

  • biSize(4字节):信息头结构大小。
  • biWidth/biHeight(各4字节):图像宽度和高度(像素)。高度为正表示自底向上存储。
  • biPlanes(2字节):平面数,固定为1。
  • biBitCount(2字节):每像素位数(1/4/8/16/24/32)。
  • biCompression(4字节):压缩类型,常用BI_RGB(0)表示无压缩。
  • biSizeImage(4字节):图像数据大小(可为0如果无压缩)。
  • biXPelsPerMeter/biYPelsPerMeter(各4字节):水平/垂直分辨率。
  • biClrUsed(4字节):实际使用的颜色数。
  • biClrImportant(4字节):重要颜色数。

调色板

当biBitCount为1、4或8时,需要调色板。调色板是一个RGBQUAD数组,每个颜色条目由4字节(蓝、绿、红、保留)组成。颜色数由biClrUsed或2^biBitCount决定。

像素数据

像素数据按行存储,每行字节数需对齐到4字节边界。对于24位图,每像素3字节(BGR顺序);32位图每像素4字节(BGRA)。对于索引色,每字节对应调色板索引。行序通常从底部开始(当biHeight为正时)。

特点与应用

BMP的优点:无压缩无损耗,结构简单易读,支持透明通道(32位)。缺点:文件体积大,不支持广色域或压缩,不适合网络传输。应用场景包括:Windows壁纸、图标、位图资源、简单图像处理软件。

总结

尽管BMP格式效率较低,但其作为基础位图格式在编程教育和底层开发中仍具价值。理解BMP结构有助于深入掌握图像文件格式原理。