BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

典型的BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。

具体数据举例:
如某BMP文件开头:
424D 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 .... ....

BMP文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。

一、图像文件头
  1)1:(这里的数字代表的是"字",即两个字节,下同)图像文件头。424Dh=’BM’,表示是Windows支持的BMP格式。
  2)2-3:整个文件大小。4690 0000,为00009046h=36934。
  3)4-5:保留,必须设置为0。
  4)6-7:从文件开始到位图数据之间的偏移量。4600 0000,为00000046h=70,上面的文件头就是35字=70字节。
  5)8-9:位图图信息头长度。
  6)10-11:位图宽度,以像素为单位。8000 0000,为00000080h=128。
  7)12-13:位图高度,以像素为单位。9000 0000,为00000090h=144。
  8)14:位图的位面数,该值总是1。0100,为0001h=1。

二、位图信息头
  9)15:每个像素的位数。有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色)。1000为0010h=16。
  10)16-17:压缩说明:有0(不压缩),1(RLE 8,8位RLE压缩),2(RLE 4,4位RLE压缩,3(Bitfields,位域存放)。RLE简单地说是采用像素数+像素值的方式进行压缩。T408采用的是位域存放方式,用两个字节表示一个像素,位域分配为r5b6g5。图中0300 0000为00000003h=3。
  11)18-19:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于位图宽度×位图高度×每个像素位数。0090 0000为00009000h=80×90×2h=36864。
  12)20-21:用象素/米表示的水平分辨率。A00F 0000为0000 0FA0h=4000。
  13)22-23:用象素/米表示的垂直分辨率。A00F 0000为0000 0FA0h=4000。
  14)24-25:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。
  15)26-27:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要。

三、彩色板
  16)28-35:彩色板规范。对于调色板中的每个表项,用下述方法来描述RGB的值:
  1字节用于蓝色分量
  1字节用于绿色分量
  1字节用于红色分量
  1字节用于填充符(设置为0)
  对于24-位真彩色图像就不使用彩色板,因为位图中的RGB值就代表了每个象素的颜色。
  如,彩色板为00F8 0000 E007 0000 1F00 0000 0000 0000,其中:
  00FB 0000为FB00h=1111100000000000(二进制),是红色分量的掩码。
  E007 0000为 07E0h=0000011111100000(二进制),是绿色分量的掩码。
  1F00 0000为001Fh=0000000000011111(二进制),是红色分量的掩码。
  0000 0000总设置为0。
  将掩码跟像素值进行“与”运算再进行移位操作就可以得到各色分量值。看看掩码,就可以明白事实上在每个像素值的两个字节16位中,按从高到低取5、6、5位分别就是r、g、b分量值。取出分量值后把r、g、b值分别乘以8、4、8就可以补齐第个分量为一个字节,再把这三个字节按rgb组合,放入存储器(同样要反序),就可以转换为24位标准BMP格式了。

四、图像数据阵列
  17)17-...:每两个字节表示一个像素。阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。

转载于:https://www.cnblogs.com/candywyq/archive/2007/07/27/832983.html

图片:jpg png gif bmp 区别(四)相关推荐

  1. c语言实现pdf显示图片,C语言读取BMP格式图片.pdf

    C语言读取BMP格式图片 C 语言读取BMP 格式图片 以下摘自维基百科,自由的百科全书 BMP 取自位图BitMaP 的缩写,也称为DIB (与设备无关的位图)是微软视窗图形 子系统(Graphic ...

  2. 图片人脸检测——Dlib版(四)

    上几篇给大家讲了OpenCV的图片人脸检测,而本文给大家带来的是比OpenCV更加精准的图片人脸检测Dlib库. 往期目录 视频人脸检测--Dlib版(六) OpenCV添加中文(五) 图片人脸检测- ...

  3. 微软服务器尚未启动是什么问题,Win10系统打开图片提示“应用未启用”的四种解决方案...

    Windows10系统不仅给我们带来了全新的界面,也新增了很多新功能.不过,部分用户在使用win10系统时,也会遇到一些令人费解的问题.比如,有windows10用户反馈在打开图片或照片的时候,会出现 ...

  4. arcgis批量导出图片(JPG、BMP、PNG)

    ARCGIS自动批量输出图片(JPG.BMP.PNG) 批量输出图片工具: 免费下载链接: https://pan.baidu.com/s/1gVfTLTxQCQ6uiz1mmtNsNA?pwd=8j ...

  5. c语言给bmp图片加滤镜,关于BMP位图透明通道的详解制作教程, 教你输出透明的BMP位图...

    我是sjmhiex啊月谢谢大家的支持  百度贴吧:sjmhiex吧 QQ群:243153684 BMP支持透明比较常见的方法有两种: 一种是32位图,直接就可以是透明的,还可以是半透明效果,一般都是用 ...

  6. 关于图片存储格式的整理(BMP)

    BMP BMP(全称Bitmap)是Window操作系统中的标准图像文件格式 可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广. 它采用位映射存储格式,除了图像深度可选以外,不 ...

  7. 怎么图片转文字提取?推荐四种图片转文字的方法

    我有一个习惯就是遇到重点内容.重要的资料就会拍照保存起来,一方面是怕自己转过头就忘了内容,另一方面也是为了能够更好的整理资料. 因为通常一份资料或者课堂内容我都会拍摄7到8张左右的照片,所以如果有时间 ...

  8. C++读图片——Mac下对于bmp文件读写读取过大的解决方案

    Mac下对bmp文件处理时size过大的解决方案 当在读写bmp信息头的时候,首先对根据C和C++的对齐预编译指令进行对齐之后,当进行读文件之后会出现biWidth和biHeight过大的情况.本篇文 ...

  9. C++图片格式转换:BMP转JPEG

    C++方式将BMP格式转换为JPEG格式,依赖了一个第三方库,工程下载链接为:点击打开链接 Bmp2Jpeg.h: #pragma onceclass CBmp2Jpeg { public:CBmp2 ...

最新文章

  1. mysql随机查询 uuid_mysql实现随机查询经验谈
  2. Qt-Creator编译pthread多线程程序的方法
  3. 四管前级怎么去掉高低音音调_TDG Audio达芬奇:什么是前级,后极?
  4. pat 乙级 1011 A+B 和 C(C++)
  5. modelsim 的高效使用
  6. listview的item中嵌套多个EditText时的问题
  7. 基于JWT(Json Web Token)的授权方式
  8. 思科五个高危漏洞 CDPwn 影响数千万台企业设备
  9. Java项目开发实战入门 PDF 扫描完整版
  10. mysql varbinary类型_mysql中varbinary、binary、char、varchar异同
  11. matlab 隐函数求偏导数,隐函数求偏导数的方法.PDF
  12. 本来共享的计算机突然无法访问,win7无法启用共享访问怎么办_win7无法启用共享访问如何处理-win7之家...
  13. Error: Unable to execute “/usr/bin/vmware-uninstall-tools.pl.终极解决方案
  14. 一百馒头一百僧升级版
  15. mac 安装软件报错
  16. androoid_4_4 yuga_clm920_cn 4G_module调试
  17. C语言的for循环转verilog,Verilog for 循环语句
  18. fat32 ntfs有什么不同
  19. android 实现屏幕录制功能,Android实现屏幕录制功能
  20. IT人人际交往篇—战胜害羞的心态

热门文章

  1. MyBatis框架 传参、事务、缓存(二级)
  2. Spring IOC注解开发
  3. python的变量对大小写并不敏感_Python编程基础02:Python基本语法
  4. ui设计移动端字体适配_超全面的移动端UI 设计规范整理汇总
  5. 电视盒安装php,全志a20安卓电视盒子安装可道云kodexplorer服务-编译安装php7.3+nginx...
  6. 一加手机如何拷贝公交卡_手机瞬间变身公交卡!教你开通腾讯乘车卡
  7. c++ linux 线程等待与唤醒_Linux驱动程序基石-POLL机制(附.视频)
  8. 网络访问此计算机,从网络访问此计算机 - 安全策略设置
  9. layui父页面调用子页面的渲染_layUI ajax加载html页面后重新渲染的方法
  10. ajax渲染的页面tp怎么赋值,【Vue】前后端不分离的情况下,TP5的视图页面中如何使用vue来接受和传递数据?...