BMP图片解析
本博客参考:https://www.cnblogs.com/l2rf/p/5643352.html
一.简介
数据段名称 | 大小(byte) | 开始地址 | 结束地址 |
位图文件头(bitmap-file header)
|
14 | 0000h | 000Dh |
位图信息头(bitmap-information header)
|
40 | 000Eh | 0035h |
调色板(color table)
|
由biBitCount决定 | 0036h | 未知 |
图片点阵数据(bitmap data)
|
由图片大小和颜色定 | 未知 | 未知 |
#pragma pack(2) //让下面结构体2字节对齐访问,不然读取到这结构体的信息不对,因为默认是4字节对齐访问
typedef struct tagBITMAPFILEHEADER
{
unsigned short bfType; //2Bytes,BMP图片格式,"BM",即0x424D
unsigned long bfSize; //4Bytes,整个BMP文件的大小
unsigned short bfReserved1; //2Bytes,保留,为0
unsigned short bfReserved2; //2Bytes,保留,为0
unsigned long bfOffBits; //4Bytes,文件起始位置到图像像素数据的字节偏移量
}BMP_FILE_HEADER;
#pragma pack()
变量名 | 地址偏移 | 大小 | 作用说明 |
bfType | 0000h | 2Bytes |
文件标识符,必须为"BM",即0x424D 才是Windows位图文件
‘BM’:Windows 3.1x, 95, NT,… ‘BA’:OS/2 Bitmap Array ‘CI’:OS/2 Color Icon
‘CP’:OS/2 Color Pointer ‘IC’:OS/2 Icon
‘PT’:OS/2 Pointer
因为OS/2系统并没有被普及开,所以在编程时,你只需判断第一个标识“BM”就行
|
bfSize | 0002h | 4Bytes | 整个BMP文件的大小(以位B为单位),比利用像素求出的字节数多一点 |
bfReserved1 | 0006h | 2Bytes | 保留,必须设置为0 |
bfReserved2 | 0008h | 2Bytes | 保留,必须设置为0 |
bfOffBits | 000Ah | 4Bytes | 说明从文件头0000h开始到图像像素数据的字节偏移量(以字节Bytes为单位),以为位图的调色板长度根据位图格式不同而变化,可以用这个偏移量快速从文件中读取图像数据 |
unsigned long biSize; //4Bytes,BMP_INFO_HEADER结构体大小
long biWidth; //4Bytes,图像宽度(以像素为单位)
long biHeight; //4Bytes,图像高度,+:图像存储顺序为Bottom2Top,-:Top2Bottom
short biPlanes; //2Bytes,图像数据平面,BMP存储RGB数据,因此总为1
unsigned short biBitCount; //2Bytes,图像像素深度
unsigned int biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4
unsigned long biSizeImage; //4Bytes,4字节对齐的图像数据大小
long biXPelsPerMeter; //4 Bytes,用象素/米表示的水平分辨率
long biYPelsPerMeter; //4 Bytes,用象素/米表示的垂直分辨率
unsigned long biClrUsed; //4 Bytes,实际使用的调色板索引数,0:使用所有的调色板索引
unsigned long biClrImportant; //4 Bytes,重要的调色板索引数,0:所有的调色板索引都重要
}BMP_INFO_HEADER;
#pragma pack()
变量名
|
地址偏移
|
大小
|
作用说明
|
biSize
|
000Eh
|
4Bytes
|
BNP信息头即BMP_INFOHEADER结构体所需要的字节数(以字节为单位)
|
biWidth
|
0012h
|
4Bytes
|
说明图像的宽度(以像素为单位)
|
biHeight
|
0016h
|
4Bytes
|
说明图像的高度(以像素为单位)。这个值的正负,指明图像是正向的位图还是倒向的位图。
该值是正数说明图像是倒向的即图像存储是由左到右,由下到上; 该值是负数说明图像是正向的即图像存储是由左到右,由上到下。大多数BMP位图是倒向的位图,所以此值是正值。 |
biPlanes
|
001Ah
|
2Bytes
|
为目标设备说明位面数,其值总设置为1
|
biBitCount
|
001Ch
|
2Bytes
|
说明一个像素深度(以比特位/像素位单位),其值可为1,4,8,16,24或32
|
biCompression
|
001Eh
|
4Bytes
|
说明图像数据的压缩类型,取值范围为:
0 BI_RGB 不压缩(最常用)
1 BI_RLE8 8比特游程编码(BLE),只用于8位位图
2 BI_RLE4 4比特游程编码(BLE),只用于4位位图
3 BI_BITFIELDS比特域(BLE),只用于16/32位位图
4
|
biSizeImage
|
0022h
|
4Bytes
|
说明图像的大小,以字节为单位。当用BI_RGB格式时,总设置为0
|
biXPelsPerMeter
|
0026h
|
4Bytes
|
说明水平分辨率,用像素/米表示,有符号整数
|
biYPelsPerMeter
|
002Ah
|
4Bytes
|
说明垂直分辨率,用像素/米表示,有符号整数
|
biClrUsed | 002Eh | 4Bytes | 说明位图实际使用的调色板索引数,0:使用所有的调色板索引 |
biClrImportant | 0032h | 4Bytes | 说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要。 |
BMP图片解析的更多相关文章
- BMP图片的解析,关于压缩方式
在做一个显示bmp图片到lcd屏的时候,发现有些bmp图显示不对. 同样是16bit bmp却有差异. 就查了一下格式. bmp文件格式 位图文件的组成 结构名称 符号 位图文件头(bitmap-fi ...
- 提取bmp图片的颜色信息,可直接framebuffer显示(c版本与python版本)
稍微了解了下linux的framebuffer,这是一种很简单的显示接口,直接写入像素信息即可 配置好的内核,会有/dev/fbn 的接口,于是想能否提前生成一个文件,比如logo.fb,里面仅包含像 ...
- 简单bmp图片处理工具——python实现
预备实现功能: 1.读取bmp文件 2.保存bmp文件 3.对bmp图片进行放大.缩小 4.对bmp图片进行灰度化 5.对bmp图片进行旋转 bmp文件格式非常简单,对于我这种初学者来说减少了不少不必 ...
- c语言数字图像处理(一):bmp图片格式及灰度图片转换
本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ...
- AS3.0 位图(BMP)解析类
/** * *-----------------------------* * | *** BMP格式解析类 *** | * *-----------------------------* * * 编 ...
- 音视频入门-03-RGB转成BMP图片
* 音视频入门文章目录 * BMP 文件格式解析 BMP 文件由文件头.位图信息头.颜色信息和图形数据四部分组成. 位图文件头(14个字节) 位图信息头(40个字节) 颜色信息 图形数据 文件头与信息 ...
- 【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片
本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp ...
- 读取bmp图片数据
public void getBMPImage(String source) throws Exception { clearNData(); //清除数据保存区 FileInputStream fs ...
- bmp图片的有关操作
读取bmp图片 并生成新的bmp图片 #include "stdafx.h"#include <windows.h>#include <cmath>#inc ...
随机推荐
- 干货 | Python进阶系列之学习笔记(四)
目录 Python条件判断 Python循环语句 Python循环控制 迭代器与生成器 异常 一.Python 条件判断 如果某些条件满足,才能做某件事情:条件不满足时,则不能做,这就是所谓的判断. ...
- Nginx 简介与安装
1,简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供俄 ...
- C#使用反射设置属性值
最近在Refix一个支持Excel文件导入导出功能时,发现有用到反射的相关技能.故而在网上查了些资料,通过代码调试加深下理解. class Program { static void Main(str ...
- Mongodb中 数据库和集合的创建与删除
1.查询数据库,查询表: show dbs //查询所有的数据库show collections //查询所有的集合(表) 2.创建数据库或切换到数据库(存在就切换,不存在就创建) use spide ...
- Hadoop入门之hdfs
大数据技术开篇之Hadoop入门[hdfs] 学习都是从了解到熟悉的过程,而学习一项新的技术的时候都是从这个技术是什么?可以干什么?怎么用?如何优化?这几点开始.今天这篇文章分为两个部分.一. ...
- Oracle创建函数例子
编写一个函数计算学生某一门课程在班级内的排名. 表结构如下: create or replace function fun_score_rank( p_in_stuid in number,--学号 ...
- shell重定向输出的应用
shell重定向输出的应用 案例2:重定向输出的应用 2.1问题 本例要求编写一个脚本/root/out.sh,功能特性如下: 执行此脚本显示I love s ...
- 深入理解equals和hashCode关系和区别
为什么要说equals和hashCode这两个东西,一来是因为有不少小伙伴面试时被问过这个东西,二来则是因为如果了解了这两个东西的原理,那么实际的开发过程中,对效率和容错率上还是能帮上很大的忙! 直入 ...
- 中阶 d03.5 (正篇)完整的Dao 操作数据库
1.目录结构: util---JDBCUtil.java(工具包,整合建立链接和释放资源的方法) dao---UserDao.java(接口,定义方法) impl---UserDaoImpl.java ...
- ubuntu core文件
ubuntu开启core 检查是否开启core ulimit -c //0表示没有开启 开启core ulimit -c unlimited sudo sh -c 'echo 1 > /proc ...