BMP图像文件数据结构

学习之前先了解不同格式长度。
参考博文:C/C++基本数据类型长度.

为图像以二进制文件流格式读取,读取内容如下:
本例以1024*1280图像读取为例。
1、位图文件头
位图像文件头具有固定长度14字节,其定义和描述如下:

//指定文件类型
//实际读取结果:42 4d ————"BM"
unsigned short bfType;	
//指定位图文件大小,以字节为单位
//实际读取结果:36 04 14 00 ———— 0X140436=1,311,798‬
unsigned long bfSize;		
//保留字,必须为0
//实际读取结果:00 00 
unsigned short bfReserved1;		
//保留字,必须为0
//实际读取结果:00 00 
unsigned short bfReserved2;		
//指定从实际图像数据到文件头起始的偏移量,以字节为单位
//实际读取结果:36 04 00 00 ———— 0X436=1,078‬
unsigned long  bfOffBits;		

2、位图信息头
位图信息头包含了设备无关位图关于颜维度和色彩格式的信息,其定义和描述如下:

//信息头长度,以字节为单位
//实际读取结果:28 00 00 00 ———— 0X28=40
unsigned long biSize;		
//位图图像的宽度,单位为像素
//实际读取结果:00 05 00 00 ———— 0X0500=1280
long biWidth;			
//位图图像的高度,单位为像素
//实际读取结果:00 04 00 00 ———— 0X0400=1024
long biHeight;			
//设备上颜色平面数目,必须为1
//实际读取结果:01 00 ———— 0X1=1
unsigned short biPlanes;	
//储存每个像素所使用的二进制位数
//实际读取结果:08 00 ———— 0X8=8
unsigned short biBitCount;
//是否压缩储存图像数据
//实际读取结果:00 00 00 00 ———— 0X00000000=0
unsigned long biCompression;
//指定图像大小,以字节为单位
//实际读取结果:00 00 14 00 ———— 0X140000=1,310,720

unsigned long biSizeImage;
//图像水平方向分辨率,单位是像素每米
//实际读取结果:23 2e 00 00 ———— 0X2e23=3,619
long biXPelsPerMeter;
//图像垂直方向分辨率,单位是像素每米
//实际读取结果:23 2e 00 00 ———— 0X2e23=3,619
long biYPelsPerMeter;	

//图像实际使用了颜色索引表中的多少种颜色
//实际读取结果:00 01 00 00———— 0X100=256‬
unsigned long biClzUsed;	
//图像中重要的颜色数目,如果为0则全部颜色都重要
//实际读取结果:00 01 00 00———— 0X100=256‬
unsigned long biClrImportant;	

3、调色板
不过多解释,毕竟我也不懂,理论自己搜,我直接跳过的。

4、图像数据
一般情况下,位图像数据是从左到右遍历最下面一行,再遍历上一行直到右上角。
图像数据起始位置为文件流开始位置后bfOffBits。基本信息位图头结构中都包含,尝试读写吧。
读取请参考本人博文 C++位图像(灰度值0~255)读取.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值