当前位置: 首页 > news >正文

2026/08/11 BMP图像

一、BMP图像原理与应用

实际项目开发过程中只在LCD液晶屏显示单一的颜色并不能满足设计需求,为了实现人机交互以及提供用户体验,UI工程师都需要设计符合产品主题的图像素材,然后提交给软件工程师进行人机界面的交互设计。由于Linux系统“一切皆文件”的特性,所以图片在Linux系统中也是以文件的形式存储。

图像格式

另外,图像中的数据必须按照某个已知的、公认的数据存储顺序和结构进行存储,这样才可以使不同的应用程序对该图像文件顺利的进行访问,从而实现数据共享。图像数据在文件中的存储顺序和结构也被称为图像文件格式。
image
目前广为流传的图像文件格式有许多,常见格式包括BMP、GIF、JPEG、TIFF、MPEG等。在各种图像文件格式中,一部分是由某个软硬件厂商提出并被广泛接受和采用的格式,例如 BMP格式就是由微软公司(MicroSoft)公司发明的数据封装格式。另一部分是由各种国际标准组织提出的格式,例如JPEG格式就是由国际静止图像压缩标准组织提出的格式。

基本概念

BMP格式最大的特征是没有任何的压缩,因此文件尺寸比较大,不适合网络传输,但是优点是这种图像格式中的数据读取出来不需要任何解码器解码就可以直接使用。

BMP格式被称为位图(Bitmap)或设备无关位图(DIB,指的是Device-Independent Bitmap),是Windows操作系统所推荐和支持的图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,所以这种格式的图片也被称为BMP文件。
image

内部结构

BMP文件的数据按照从文件头开始的先后顺序分为四个部分:分别是位图文件头、位图信息头、调色板(24bit位图是没有的)、位图数据(RGB)。
image
可以看到,BMP文件的位图文件头和位图信息头一共为54字节大小,其中位图文件头为14字节,位图信息头为40字节

(1)位图文件头

位图文件头(Bitmap-File Header)包含了图像类型、图像大小、两个保留字以及位图数据存放地址。
image

(2)位图信息头

位图信息头(Bitmap-Information Header)包含了位图信息头的大小、图像的宽和高、图像的色深、压缩说明、图像数据的大小和其他一些参数。
image

例:设计程序,利用系统IO读取磁盘上指定BMP图片的宽和高,以及BMP图片的大小,并输出到终端,要求图片名称通过命令行传递。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>int main(int argc, char const *argv[])
{int bmp_size   = 0; //用于存储BMP图片的大小int bmp_height = 0; //记录BMP图片的高int bmp_width  = 0; //记录BMP图片的宽//1.BMP图片的路径是通过命令行传递,所以需要检测参数有效性if (2 != argc){printf("argument is invaild\n");return -1;}//2.利用系统调用open()打开待读取数据的BMP图片  int bmp_fd = open(argv[1],O_RDWR);if ( -1 == bmp_fd){printf("open %s is error\n",argv[1]);return -1;}//3.从被打开的BMP图片中读取图像信息lseek(bmp_fd,2,SEEK_SET);read(bmp_fd,&bmp_size,4); 	//读取BMP图片大小lseek(bmp_fd,18,SEEK_SET);read(bmp_fd,&bmp_width,4);	//读取BMP图片的宽lseek(bmp_fd,22,SEEK_SET);read(bmp_fd,&bmp_height,4);	//读取BMP图片的高//4.输出BMP信息printf("bmp name is %s ,width = %d,height = %d,size = %d\n",argv[1],s2.width,s2.height,s1.size);return 0;
}

(3)调色板

bmp位图按照像素深度分类可以分为:1bit位图(2色)、4bit位图(16色)、8bit位图(256色)、16bit位图(65536色-高彩色)、24bit位图(1670万色-真彩色)、32bit位图(1670万色-增强型真彩色)。

调色板是为了让一些颜色深度比较小(1bit、4bit、8bit)的位图可以表示颜色而设置的。调色板存储颜色,后面的位图数据存储颜色索引,这样调色板+位图数据就可以表示颜色了。

需要注意的是:16bit、24bit、32bit的位图一般没有调色板,因为从16bit开始就直接使用位图数据表示颜色了。
image

(4)位图数据

位图数据分两种情况,如果带调色板,则位图数据存放的是调色板的颜色索引,如果不带调色板,则位图数据存放实际的argb值。由于24位bmp图片不带调色板,所以文件开头的54字节为图片信息,从第55个字节开始就为bmp图片的颜色数据。

对齐说明
计算机的CPU为了提高工作效率,所以读取数据的时候会进行字节对齐,一般图像刷新都是行为单位,所以CPU每次都是读取一行的大小,所以32bit系统下如果一行字节大小不是4的倍数,就会进行字节补齐,目的是提高效率,是典型的用空间来换时间的案例!

如果分辨率是10*10,每行10个像素点,每个像素点3字节,所以一行是30个字节,不够4的倍数,所以需要在每行的末尾补2个字节。

由于每行必须是4的倍数,所以需要补齐的字节数有4种情况:0、1、2、3,所以需要设计算法来计算每行需要自动补齐的字节数。 公式: byte = ( 4 - (width*3 % 4) ) % 4

存储顺序

如果打算了解BMP图片内部数据的存储顺序(大端 or 小端),应该去查看BMP文件内部数据结构,需要使用专业工具(HEX十六进制查看器)。
image
通过分析,可以知道BMP图片内部数据是采用小端方式进行存储。

像素结构
image

例:设计程序,实现在LCD上显示一张分辨率为800*480大小的24bit的bmp图片,要求图像不失真可以在开发板的LCD上显示。

例:设计程序,实现在LCD上任意位置显示一张任意大小的色深为24bit的bmp图片,要求图像不失真可以在开发板的LCD上显示。

例:设计算法,要求把一张任意尺寸的BMP图片等比例且不失真的缩小为原来的1/2,并生成一张新的BMP图片,要求BMP图片的路径都需要通过命令行进行传递
int srcbmp_fd = open(“src_bmp”,O_RDWR);

struct xxx1;
struct xxx2;

read(srcbmp_fd,&xxx1,14);
read(srcbmp_fd,&xxx2,40);
while()

close();

http://www.jsqmd.com/news/1375434/

相关文章:

  • 2026装修加盟品牌哪家好?安与馨托管家装3.0新模式深度解析 - 优企甄选
  • 电动车托运收费贵?2026年个人寄电动车省钱攻略+避坑指南 - 快递物流资讯
  • 2026年新加坡服务好中学留学机构推荐:五家优选深度解析 - 科技焦点
  • 2026年新发布:沧州半自动升降柱公司推荐九百平厂房自产,供货稳不耽误工期-金志恒科技 - 行业甄选汇
  • uni-app路由插件化:解锁高效开发新姿势
  • 2026年新加坡留学中介哪家靠谱:五家优选深度解析 - 科技焦点
  • 2026年加拿大留学申请成功率高的机构推荐:五家优选深度解析 - 科技焦点
  • Spring Boot的基本介绍和创建Spring Boot项目-day01
  • 2026年研究生留学咨询机构推荐:五家优选深度解析 - 科技焦点
  • 2026年加拿大留学移民中介推荐:五家优选深度解析 - 科技焦点
  • 上海普陀区企业如何选择靠谱的GEO服务商?OEM白标合作避坑指南 - 小随科技
  • 2026年新西兰留学哪家更专业:五家优选品牌深度解析 - 科技焦点
  • 2026 线上评选避坑:企业、校园活动必须配置的三项投票防护机制 - 投票评选制作软件系统
  • 举办大型赛事线上评比怎么做?带多层安全防护、高清视频的不限名额免费投票平台 - 投票评选制作软件系统
  • 2026年英国留学服务口碑好的机构:五家优选深度解析 - 科技焦点
  • 2026年新西兰留学申请高成功率机构:五家优选深度解析 - 科技焦点
  • 深圳罗湖区OEM白标贴牌GEO服务商怎么选?2026年靠谱推荐与避坑指南 - 子柔传媒
  • Collaborative Memory: Multi-User Memory Sharing in LLM Agents with Dynamic Access Control 论文笔记
  • 2026年出国留学机构对比评测:五家优选品牌深度解析 - 科技焦点
  • 2026年奉贤新房装修如何选?价格影响因素全解析 - 盟道科技
  • 2026临沂新房装修公司推荐:墅愿设计全案家装 打造确定性交付 - 优企甄选
  • 2026年水晶灯厂家实力甄选:中山轻奢法式欧式全屋高端酒店工程大型宴会厅别墅会所豪华水晶灯品牌解析 - 优企名品
  • 微信无记名投票该怎样发起?简易搭建教程以及 2026 实用工具分享 - 投票评选制作软件系统
  • 上海市奉贤区上海市奉贤区新房装修怎么选择更可靠 - 盟道科技
  • 上海徐汇区OEM白标贴牌GEO服务商怎么选?2026年靠谱合作路径与推荐 - 企业新闻快传
  • 猫抓配合N_m3u8DL-RE实现m3u8下载 - Leone
  • 2026去抖音水印,在线工具风险大?手机App合规吗? - 免费软件工具方法教程
  • 2026年英国留学咨询机构有哪些推荐:五家优选深度解析 - 科技焦点
  • 奉贤区选择装修装饰服务商有哪些常见风险? - 盟道科技
  • 2026年出国留学机构口碑评估参考:五家优选品牌深度解析 - 科技焦点