• 位图文件(BMP)


     
    位图文件
    简介
     
    BMPBitmapFile)格式是最常用的图像文件存取格式之一,是微软为其Windows环境设置的标准图像格式,BMP位图文件默认的文件扩展名是“.BMP”或者“.bmp”,有时它也会以“.DIB”或者“RLE”为扩展名。用BMP格式存放的图像几乎可以被所有的图像显示软件读取。
    BMP图形文件是Windows采用的图像文件格式,在Windows环境下运行的所有图像软件都支持BMP图像文件格式。Windows系统内部个图像绘制操作都是以BMP为基础的。Windows3.0以前的BMP文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图(Device Dependent Bitmap,DDB)文件格式。Windows3.0以后的BMP文件都与显示设备无关,因此把这种BMP文件格式称为设备无关位图(Device Independent Bitmap,DIB)格式。
     
    BMP文件格式
    摘要
     
             每个BMP文件只能存放一张图像。图像数据是否采用压缩方式存放,取决于文件的大小与格式,即压缩处理是BMP图像文件的一个选项,用户可以根据需要进行选择。
             其中,非压缩格式是BMP图像文件所采用的一种通用格式,它按照一定的顺序忠实的记录图像中每一个像素的颜色值。如果用户确定将BMP文件格式压缩处理,则Windows设计了一种压缩方式:如果位图为16色模式,则采用RLE4压缩方式,如果图像为256色模式,则采用RLE8压缩方式。
             BMP图像数据文件格式可以存储为单色,16色,256色和真彩色四种图像数据,其数据的排列顺序与一般文件不同,它以图像的左下角作为起点存储图像,而不是以图像的坐上角为起点。而且BMP图像文件格式中还存在另外一个与众不同的特点,即其调色板数据所采用的数据结构中,红,绿,蓝三种基色数据的排列顺序也恰好与其他图像文件格式相反。总之,BMP图像文件格式拥有许多适合于Windows环境的新特色,而且随着Windows版本的不断更新,微软也在不断的改进BMP图像文件格式。
     
    BMP中包含的域
     
    BMP位图文件是由四个部分组成:位图文件头(bitmap-file header,位图信息头(bitmap-information header,调色板(color table)和定义位图的字节阵列(图像数据阵列)。其对应的结构体或类型分别为:BITMAPFILEHEADER,BITMAPINFOHEADER,RGBQUAD,BYTE
    1.   位图文件头
    位图文件头BITMAPFILEHEADER
    偏移
    域的名称
    长度/字节
    内容
    0000h0
    bfType
    2
    两字节的内容用来识别位图的类型,存储的是两个字符的ASCII码。
    BM(0x4D42):Windows
    BA/CT/CP/IC/PT: OS/2
    0002h2
    bfSize
    4
    整个文件的大小
    0006h6
    bfReserved1
    2
    保留未用,必须为0
    0008h8
    bfReserved2
    2
    保留未用,必须为0
    000Ah10
    bfOffBits
    4
    从文件开头到图像数据开始之间的字节数,有了该数据能方便地跳过位图的信息头
     
     
    2.   位图信息头BITMAPINFOHEADER
     
    偏移
    域的名称
    长度/字节
    内容
    000Eh14
    biSize
    4
    文件信息头的长度
    40(28h)Windows
    00012h18
    biWidth
    4
    位图的宽度,以像素为单位
    00016h22
    biHeight
    4
    位图的高度,以像素为点为
    001Ah26
    Biplanes
    2
    位图的为平面数(该值总是为1
    001Ch28
    biBitCount
    2
    每个像素的位平面数,有下面几种情况:
    1:单色位图
    416色位图
    8256色位图
    1616bit高彩色位图
    2424bit真彩色位图
    3232bit增强型真彩色位图
    001Eh30
    biCompression
    4
    压缩说明:
    0:不压缩(BI_RGB表示)
    1RLE8,使用8RLE压缩方式(用BI_RLE8表示)
    2RLE4,使用4RLE压缩方式(用BI_RLE4表示)
    3Bitfields:位域存放方式(用BI_BITFIELDS表示)
    0022h34
    biSizeImage
    4
    位图数据的大小,以字节为单位。该数必须是4的倍数。当图像存储的是非压缩数据的时候,它的取值可以为0,实际上,此时位图数据的大小可以通过biBitCountbiWidthbiHeight等计算出来
    0026h38
    biXPelsPerMeter
    4
    用像素/米表示的水平分辨率
    002Ah42
    biYPelsPerMeter
    4
    用像素/米表示的垂直分辨率
    002Eh46
    biClrUsed
    4
    位图使用的颜色数,如果为0则表示使用了全部可能的颜色
    0032h50
    biClrImportant
    4
    指定重要的颜色数。当该域的值等于颜色数时(或者等于0时),表示所有颜色都一样重要
     
    3.   调色板
     
    调色板又叫彩色映像表,使用每个像素为14或者8为的图像必须有一个调色板,相对应的调色板的大小分别为216或者256个表项。如果图像没有使用相对应的全部颜色,则调色板仅记录使用过的颜色,此时调色板会小一些。也就是说,如果位图信息头中的biClrUsed字段非零,则它记录的是使用的颜色数目,同时它也是彩色映像的表项号码。若该字段为0则彩色映像为全大小,也就是说色深为148的图像,调色板分别具有216256个表项。
    对于16为和24为的图像,没有调色板,图像是直接RGB彩色,此时biClrUsed字段不为0,以提供一个建议的调色板大小,不过并没有多少实际意义。
    由于显示设备可能不具备图像所需的那么多的颜色,因此彩色映像中的表项在排列顺序应该是最重要的颜色排在前面。位图信息头中的biClrImportant字段如果不为0,则指出了对于好的图像重新生成多少种颜色是重要的
    彩色映像表RGBQUAD结构定义:
    偏移
    域的名称
    长度/字节
    内容
    0
    rgbBlue
    1
    调色板项的蓝色值
    1
    rgbGreen
    1
    调色板项的绿色值
    2
    rgbRed
    1
    调色板项的红色值
    3
    rgbReserved
    1
    保留未用,必须为0
     
    4.   图像数据阵列
     
    紧跟在调色板之后的是图像数据阵列,它包含所有的位图数据字节,这些数据可能是彩色调色板的索引号,也可以是实际的RGB值。
    图像的每一扫描行由表示图像像素的连续的字节组成,每一个扫描行对应的字节数取决于图像的色深和图像的宽度。扫描行是由底向上存储的,这就是说,阵列中的第一个字节表示位于左下角的像素,而最后一个字节表示位图右上角的像素。
    图像数据中的阵列可以是压缩的,也可以是不压缩的:每个像素可以用一位表示,也可以用32位表示,这些都是由前面讲过相关字段决定。下面分别说明不同色深的位图中图像数据阵列到底是如何排列的。
    (1)         色深1位的位图
    每个像素只用一位表示,每个字节可以表示8个像素,字节中的最高位对应于最左边的像素。
    (2)         色深4位的位图
    对没有压缩的图像,每个字节可以表示2个像素,高4位为左边的像素,且每行填充到一个4字节的边界上。
    (3)         色深8位的位图
     
    对没有压缩的图像,每个字节表示一个像素。每行填充到4字节边界。
    (4)         色深24位的位图
     
    每个像素用3个字节表示,顺序依次为红,绿和蓝的值。每行用0填充到4字节的边界。
  • 相关阅读:
    [蓝桥杯2019初赛]
    HDU2054
    HDU1175
    POJ3259
    数据结构
    欢迎来测!!!
    jsp页面el取不到值,java片断可以取到
    HTML中table边框的显示总结转载▼
    jquery插件图片延时加载实例详解(转)
    引用CDN内容的方法总结(转)
  • 原文地址:https://www.cnblogs.com/mywolrd/p/1930731.html
Copyright © 2020-2023  润新知