Windows API操作BMP图像(1)BMP图像格式简介
qiyuwang 2025-03-26 16:32 5 浏览 0 评论
BMP(全称Bitmap)位图是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用范围非常广。DDB不具有自己的调色板信息,他的颜色模式必须与输出设备相一致。如:在256色以下地位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。由于DDB高度依赖输出设备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中。DIB具有自己的调色板信息,他可以不依赖系统的调色板。由于他不依赖于设备,所以通常用它来保存文件,如.bmp格式的文件就是DIB。
BMP采用位映射存储格式,除了图像深度可选以外,一般不采用其他任何压缩,因此,BMP文件所占用的空间比较大。BMP文件的图像深度可选1比特(二值图像)、4比特、8比特、24比特(真彩色图像)和32比特(真彩色图像)。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上按行序存储的顺序。由于BMP文件格式是Windows环境中交换与图像有关的数据的一种标准,因此在Windows环境中运行的图像软件都支持BMP图像格式。而在图像处理中,由于内存处理图像时多采用BMP格式,因此掌握BMP格式图像格式对于理解数字图像处理技术有着很好的帮助,这里对其格式进行详细介绍。
如上所示,BMP图像文件由文件信息头、位图信息头、调色板信息和位图数据等几个部分组成。如果是24位或32位真彩色图像,则不包含调色板信息。
文件信息头结构体BITMAPFILEHEADER定义如下:
typedef struct tagBITMAPFILEHEADER {
WORD bfType; //文件类型,必须是0x4D42,也就是字符串”BM”
DWORD bfSize; //指定文件大小
WORD bfReserved1; //保留字,设为0
WORD bfReserved2; //保留字,设为0
DWORD bfOffBits; //从文件头到位图数据的偏移字节数
} BITMAPFILEHEADER;
其中结构体中bfOffBits成员的值为:sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER) + 调色板长度,定义为从文件头到实际位图数据的偏移字节;如果是真彩色图像,则 bfOffBits的值固定为54字节。
位图信息头BITMAPINFOHEADER定义如下:
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; //BITMAPINFOHEADER结构体的长度,40个字节
LONG biWidth; //图像的宽度,单位是像素
LONG biHeight; //图像的高度,单位是像素
WORD biPlanes; //必须是1
WORD biBitCount; //颜色位数,如1,4,8,24
DWORD biCompression; //压缩类型,如BI_RGB,BI_RLE4
DWORD biSizeImage; //实际位图数据占用的字节数
LONG biXPelsPerMeter; //水平分辨率
LONG biYPelsPerMeter; //垂直分辨率
DWORD biClrUsed; //实际使用的颜色数
DWORD biClrImportant; //重要的颜色数
} BITMAPINFOHEADER;
位图信息头结构体各个成员补充解释如下表所示:
BITMAPINFOHEADER结构体各成员含义
结构体字段 | 含义 |
biSize | 说明BITMAPINFOHEADER结构所需要的字节数 |
biWidth | 图像的宽度,单位是像素 |
biHeight | 指图像高度,以像素为单位,值可以为正数,也可以为负数。值为正数时表示图像的像素是从左上角开始,从左到右,从上到下逐行存储的;值为负数时表示图像的像素从右下角开始,从左到右,从下到上逐行存储的。 |
biPlanes | 表示bmp图片的平面属性,显然显示器只有一个平面,所以恒等于1 |
biBitCount | 每个像素所需要的比特数,其值为1、4、8、16、24或32 |
biCompression | 图像数据压缩的类型,其中: BI_RGB:没有压缩 BI_RLE8:每个像素8比特的RLE压缩编码,压缩格式由2字节组成(重复像素计数和颜色索引); BI_RLE4:每个像素4比特的RLE压缩编码,压缩格式由2字节组成 BI_BITFIELDS:每个像素的比特由指定的掩码决定。 BI_JPEG:JPEG格式 对于普通位图图像,一般biCompression设为BI_RGB。 |
biSizeImage | 图像的大小,以字节为单位。当用BI_RGB格式时,可设置为0 |
biXPelsPerMeter | 水平分辨率,用像素/米 |
biYPelsPerMeter | 垂直分辨率,用像素/米 |
biClrUsed | 位图实际使用的调色板中的颜色索引数(设为0的话,则说明使用所有调色板项) |
biClrImportant | 说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要 |
调色板(color table)是索引图像所特有的。调色板大小与索引图像中的颜色数目相同,如单色图像、16色图像、256色图像所对应的调色板数目分别是2、16和256。调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引。
在早期的计算机中,显卡相对比较落后,不一定能保证显示所有颜色,所以在调色板中的颜色数据应尽可能将图像中主要的颜色按顺序排列在前面,位图信息头的biClrImportant字段指出了有多少种颜色是重要的。
每个调色板的大小为4字节,按蓝(B)、绿(G)、红(R)存储一个颜色值,BMP图像显示时按调色板中给出的值显示图像。BMP图像的调色板的结构体RGBQUAD如下:
typedef struct tagRGBQUAD {
BYTE rgbBlue; //蓝色分量值
BYTE rgbGreen; //绿色分量值
BYTE rgbRed; //红色分量值
BYTE rgbReserved; //保留值,总是为0
} RGBQUAD;
如果位图是单色、16色、256色或索引色,则紧跟着调色板的是位图数据,位图数据是指向调色板的索引序号。
如果位图是16位、24位和32位色,则图像文件中不保留调色板,即不存在调色板,图像的颜色直接在位图数据中给出。
16位图像使用2个字节保存颜色值,常见有两种格式:5位红5位绿5位蓝和5位红6位绿5位蓝,即555格式和565格式。555格式只使用了15位,最后一位保留,设为0。
24位图像使用3个字节保存颜色值,每一个字节代表一种颜色,按蓝、绿、红次序排列,即24位真彩色图像像素的存储顺序是BGR。
32位图像使用4个字节保存颜色值,每一个字节代表一种颜色,除了原来的蓝、绿、红,还有 Alpha通道,即透明度,所以32位图像的存储顺序是BGRA。
如果图像带有调色板,则位图数据可以根据需要选择压缩与不压缩,如果选择压缩,则根据BMP图像是16色或256色,采用RLE4或RLE8压缩算法压缩。
相关推荐
- 微软宣布将于10月份关闭OneDrive组功能
-
【巴士数码】微软已经宣布将在今年10月关闭OneDrive的组功能。一年多之前,微软已经关闭了用户在OneDrive当中创建组的功能。大大多数用户会发现共享文件夹是一种合适的替代品,而且由于这一点,O...
- 玩转Win10任务栏:从基础设置到效率神器的全攻略
-
一、基础操作:解锁任务栏的「隐藏布局」...
- 文档以只读模式打开的原因及解决方法
-
当文档以只读模式打开时,可能由多种原因导致。以下是详细的原因分析与对应解决方法,您可根据实际情况灵活选择操作。一、文件属性设置问题(一)Windows系统在Windows系统中,若文件属性被标记...
- Windows系统的优化(windows优化设置)
-
今天给大家讲一讲系统的图标和一些基本的优化。安装了原版系统之后有很多地方需要优化比如桌面图标小箭头,盾牌,休眠占用内存,关闭通知栏。首先我们打开软件这款软件以前就讲到过就是dism++软件,他可以清理...
- Win 10偷偷传送用户隐私至微软(win10设备隐私)
-
自推出以来Win10不断被揭发盗取用户带宽、泄漏WiFi密码等各式各样的私隐问题,令不少网络专家开始留意Win10还隐藏了多少类似的私隐漏洞。最近再有人发现Win10部分功能静静...
- OneDrive逆势下调存储空间,不限量存储被取消
-
日前,微软在周一晚发布的博客文章中表示,由于部分用户存滥用储存功能,所以该公司将取消不限量OneDrive存储服务。不限量用户的最大存储空间将被下调至1TB,定价为6.99美元,对于已存储较多文件和内...
- Win10中那些被微软取消的功能(微软公司从9日起停止对windows8的主流服务支持)
-
很多用户在使用Win10的时候,都会发现一些在Win7系统中的功能被取消了,有的时候想找也找不到。那么到底是那些过去的功能在Win10中被取消了呢?下面我们就简单梳理一下,并且告诉大家解决的办法。Wi...
- 微软推Win11 Dev 26200.5570预览版:语音打字上线脏话过滤选项
-
IT之家4月26日消息,微软公司昨日(4月25日)发布博文,邀请Dev频道的WindowsInsider项目成员,测试适用于Windows1124H2的KB50556...
- 微软VSCode商店发现9款挖矿恶意插件,已安装超30万次
-
IT之家4月8日消息,科技媒体bleepingcomputer昨日(4月7日)发布博文,报道称安全专家在微软VSCode扩展商店中,发现了9款伪装成开发工具的恶意插件。这些插...
- 微软Windows 11开始菜单大改版!(windows 11 开始菜单)
-
根据最新消息,微软正在对Windows11的开始菜单进行重大改版,这一更新将彻底改变其布局和功能。Windows11的开始菜单将从现有的多栏布局改为单栏可滚动视图,所有固定图标和已安装应用都将集中...
- OneDrive无限存储空间取消 免费降至5GB
-
2015-11-0313:35:06作者:徐鹏北京时间11月3日消息,微软在一篇博客文章中称,将取消OneDrive存储服务的不限量空间,原因是部分用户有滥用问题。OneDrive无限存储空间取消...
- 省出电脑C盘空间!微软悄悄更新:OneDrive终于能卸载了
-
快科技3月12日消息,近日,微软悄悄地在官方更新了关闭、禁用、卸载Windows自带软件OneDrive的方法。微软Windows系统自带了很多软件和功能,其中有很多我们可能永远都用不上。但这些软件还...
- 微软关闭OneDrive新建组群功能(windows关闭onedrive)
-
微软的OneDrive云端储存服务能够让你创建组群(Group),这样当你和团队成员共同从事一个项目的时候能够通过云端协作提升效率,并且组群的文档储存空间还将同你标准的OneDrive分割独立开来。不...
- 微软为何取消OneDrive无限制容量存储?被75TB占用吓坏
-
那么为什么微软会取消Office365的无限OneDrive存储呢?“自推出Office365订阅无限制存储服务以来,一小部分用户开始备份多台PC设备,存储众多电影收藏合集和DVR录像。在某些情况下...
- Win11必关的5个设置!关闭后电脑流畅到起飞,操作简单不藏私!
-
Windows11虽然界面炫酷,但默认设置中隐藏了不少“拖慢电脑”的坑!尤其是老电脑用户,用久了卡顿、开机慢、反应迟钝……其实只需关闭几个鸡肋功能,就能让电脑提速50%以上!...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 微软宣布将于10月份关闭OneDrive组功能
- 玩转Win10任务栏:从基础设置到效率神器的全攻略
- 文档以只读模式打开的原因及解决方法
- Windows系统的优化(windows优化设置)
- Win 10偷偷传送用户隐私至微软(win10设备隐私)
- OneDrive逆势下调存储空间,不限量存储被取消
- Win10中那些被微软取消的功能(微软公司从9日起停止对windows8的主流服务支持)
- 微软推Win11 Dev 26200.5570预览版:语音打字上线脏话过滤选项
- 微软VSCode商店发现9款挖矿恶意插件,已安装超30万次
- 微软Windows 11开始菜单大改版!(windows 11 开始菜单)
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)