| 标题:[转帖]BMP格式解析 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
BMP 格式解析
参考文章: 《 位图文件( BMP )格式分析以及程序实现 》
本来应该先着手把 SDRAM 模块再整理包装一下,但是今天没法静心整理代码,所以就干脆趁着周末上网方便好好对 BMP 格式的图片数据结构做一些深入的了解。之所以先从位图( Bitmap )入手,当然是因为位图简单,更因为它是 Windows 显示图片的基本格式。在 Windows 下,任何各式的图片文件(包括视频播放)都要转化为位图的时候才能显示出来。关于这点,做过一些液晶驱动器的特权同学还是深有体会的。不过以前做过的驱动部分大都是人家送数据过来我放到 RAM 里,然后每次显示从 RAM 搬数据这样的活,相对比较简单,没什么真正意义上的图片结构的成分,只是自己定义好了起始和结束地址就 OK 了。这样的数据也很容易得到,用字模或者图片取模软件转一下就可以。那么就开始好好学习一下BMP吧。
一、下面我们来看看位图文件( *.BMP )的格式。位图文件主要分为如下 3 个部分:
1 、 文件信息头 BITMAPFILEHEADER结构体定义如下: typedef struct tagBITMAPFILEHEADER { /* bmfh */ UINT bfType; DWORD bfSize; UINT bfReserved1; UINT bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; 其中:
看完理论不够,看看实际的 Winhex 里的数据是什么吧:
直接找的图片的开始簇。偏移地址 0-1 是 4D42H ,即‘ BM ’;偏移地址 2-5 是 00300036H ,即该图片大小为十六进制的 300036Byte ,换算一下 3M 左右,和 winhex 里的根目录的数值是一样的;偏移地址 6-7 、 8-9 都是 0000H ;偏移地址 a-d 是 00000036H 也就是说从图片开始字节地址 41000H 往后的偏移量为 36H 字节的数据才是真正的图片数据。你算一下会发现这前 36H 地址即存放 54 个字节数据正好是文件信息头( 14B )和位图信息头( 40B )的数据。
2 、位图信息头 BITMAPINFOHEADER结构体定义如下: typedef struct tagBITMAPINFOHEADER { /* bmih */ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER; 其中:
再来看偏移地址 0E 开始的信息头的数据。偏移地址 0e-11H 为 00000028H ,即 BITMAPINFOHEADER 结构所需要的字数为 28H ,具体是个什么含义就不得而知了;偏移地址 12-15H 为 00000400H (即 1024 ),偏移地址 16-19H 为 00000300H (即 768 ),这两个参数对应图片的像素是 1024*768 ;偏移地址 1AH-1BH 是 0001H ,即 biPlanes=1 ;偏移地址 1CH-1DH 是 0020H ,即该 32bit/ 像素;偏移地址 1eH-21H 是 00000000H ,应该是表示没有压缩的图像;偏移地址 22H-25H 是 00300000H ;表示图像大小为 3MB ;偏移地址 26H-29H 是 00000000H ,偏移地址 2aH-2dH 是 00000000H ;偏移地址 2eH-31H 是 00000000H ;偏移地址 32H-35H 是 00000000H 。
3 、 RGB 颜色阵列有关 RGB 三色空间我想大家都很熟悉,这里我想说的是在 Windows 下, RGB 颜色阵列存储的格式其实 BGR 。也就是说,对于 24 位的 RGB 位图像素数据格式是:
对于 32 位的 RGB 位图像素数据格式是:
透明通道也称 Alpha 通道,该值是该像素点的透明属性,取值在 0 (全透明)到 255 (不透明)之间。对于 24 位的图像来说,因为没有 Alpha 通道,故整个图像都不透明。
这么看来, BPM 还真是原滋原味的表现出了图片的所有数据,不带任何压缩的。 |
BMP 文件格式解析---转
最新推荐文章于 2025-11-23 20:34:17 发布
本文详细解析了BMP图像格式的内部结构,包括文件信息头、位图信息头及RGB颜色阵列等内容,并通过实例展示了各字段的具体含义。
1210

被折叠的 条评论
为什么被折叠?



