• BMP文件格式


    偶尔在网上看到大神的笔记,现系统的学习一遍BMP格式

    选用的BMP文件为 灰色lena图

    用EditPlus以十六进制打开图片:

    BMP介绍

    BMP文件,又叫位图,是Windows中使用的图片格式。

    文件格式:

    1、bmp文件头(bmp file header):提供文件的格式、大小等信息

    2、位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息

    3、调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表

    4、位图数据(bitmap data):就是图像数据

    真彩色

    24位图像,即R、G、B三种颜色各用8bit表示,称为真彩色,这种情况下不需要调色板,即位图信息后紧跟着的就是位图数据

    预备知识

    1. 在BMP文件中,如果一个数据需要用几个字节来表示的话,那么该数据的存放字节顺序为“低地址村存放低位数据,高地址存放高位数据。如数据0x1756在内存中的存储顺序为:

                                      

    这种存储方式称为小端方式(little endian) , 与之相反的是大端方式(big endian)。

    2.  以下所有分析均以字节为序号单位进行。

       下面我们对从文件中拉出来的数据进行剖析:

    文件头

    Windows为bmp文件头作出如下定义:

    typedef struct tagBITMAPFILEHEADER 
    {  
    	UINT16 bfType;    //文件类型,2Byte
    	DWORD bfSize;  //文件大小, 4Byte
    	UINT16 bfReserved1;   // 保留字段1,  2Byte
    	UINT16 bfReserved2;  // 保留字段2, 2Byte
    	DWORD bfOffBits;    // 数据与文件头的偏移量, 4Byte
    } BITMAPFILEHEADER;
    

    其中:

    对照文件,我们可见:

    1、1-2:42 4d 为“BM”,表示Windows支持的位图格式,即指是BMP文件

    2、3-5: 36 04 01 00 即0X00010436 等于66614 约为65kb

    3、6-9:00 00  00 00 保留字段1和2

    4、a-d:36 04 00 00 即0X00000436等于1078,即数据从1078处开始

    一共14个字节

    信息头

    Windows定义信息头结构体如下:

    对照数据文件:

    1、0e-11:28 00 00 00 即0x00000028 等于40,即信息头大小为40bit

    2、12-15:00 01 00 00 即0x00000100等于256,即图像宽度为255像素

    3、16-19:00 01 00 00 即0x00000100等于256,即图像高度为255像素,且这是一个正数,说明图像数据是从图像左下角到右上角排列的

    4、1a-1b:0100 即0x00010,等于1,即颜色平面数为1

    5、1c-1d:0800 即0x0008.等于8,即每个像素占8bit

    6、1e-21:00 00 00 00 即0,BI_RGB格式

    7、22-25:00 00 01 00 即0x00010000 等于65536.指图像大小

    8、26-29:00 00 00 00 等于0.水平分辨率

    9、2a-2d:00 00 00 00 等于0 垂直分辨率

    10、2e-31:00 01 00 00 即0x00000100 等于256,指实际使用的颜色索引数256

    11、32-35:00 00 00 00 即0,指重要的颜色索引数为0

    至此,文件头+信息头 = 64Byte

    调色板

    一张映射表,布局想二维数组[N][4],N指总的颜色所引数,每行四个元素对应B、G、R和Alpha值,一个分量一个字节,若无透明通道,则Alpha为0

    对照数据文件:

    本图中,N=256.即256个颜色索引

    索引 B  G R Alpha
    0 00 00 00 00
    1 01 01 01 00
    2 02 02 02 00
    3 03 03 03 00
    4 04 04 04 00
    5 05 05 05 00
    ..... ...... ...... ...... ......

    一共256种颜色,每个颜色占一个字节,一共是1024个字节,加上文件头和信息头的54字节,一共是1078个字节,即在数据之前有1078个字节

    位图数据

    每个像素占一个字节,取得该字节后,以该字节为索引查询相应的颜色,并显示到相应的显示设备上,由于信息头中图像的高度为正数,故位图数据在文件中排列是从左下角到右上角,以行为主序排列的

    参考

    1、BMP文件格式详解

    作者: Pam

    出处: https://www.cnblogs.com/pam-sh/>

    关于作者:网安在读

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(mir_soh@163.com)咨询.

  • 相关阅读:
    WinAPI: midiOutReset 重置输出设备
    WinAPI: midiOutLongMsg 向输出设备发送一条系统专用的 MIDI 消息
    WinAPI: midiInStart 启动输入
    WinAPI: midiOutClose 关闭输出设备
    WinAPI: midiInStop 停止输入
    bootstrap居中
    设计模式之访问者模式
    zend framework 开发环境搭建及入门
    转:GIT GUI使用
    Asp web.config详解
  • 原文地址:https://www.cnblogs.com/pam-sh/p/14600230.html
Copyright © 2020-2023  润新知