Have a Question?

如果您有任务问题都可以在下方输入,以寻找您想要的最佳答案

bmp是什么格式,BMP与JPEG PNG的区别

bmp是什么格式

题图来自Unsplash,基于CC0协议

导读

  • BMP文件格式是什么
  • BMP格式的特点和用途
  • BMP与JPEG PNG的区别
  • BMP格式支持压缩吗
  • BMP文件头结构详解
  • BMP文件格式,即位图图像文件,是Windows早期发展起来的一种独立于设备的图像格式,其核心特点是存储未经压缩或少量压缩的原始像素数据,因此成为最简单透明的图像存储标准之一。与JPEG、PNG等格式相比,BMP格式起步最早、最贴近设备编码本质。

    BMP格式的两大原始特点是结构简单和存取直接。它不依赖于特定的硬件平台(如Intel或Motorola字节序),通过固定的文件头和可变的信息头(又称DIB头)组织数据,直接存储图像的RGB(或CMYK等)像素阵列。这种设计保证了在不同设备和系统上显示的一致性,但也导致了它那举世闻名的庞大文件体积。

    BMP的主要用途集中在对图像精度和完整性要求高而对文件大小要求不敏感的场景,例如屏幕截图、某些图像处理或绘图应用程序的基础存储、打印图像等。它的无压缩特性使其成为某些需要保留原始图像数据进行编辑的场合的基石。

    从压缩角度看,BMP格式本身的设计初衷是存储未压缩数据,但标准规范中预留了支持压缩的空间。通过BMP文件头中的CbmpType字段可以指示是否使用了压缩。当该字段为1时,表示该文件可能使用了RLE(游程长度编码)压缩。RLE压缩在图像具有大面积颜色单一区域(如纯色背景或图案)时效果显著,能有效减小文件大小;但在颜色过渡平滑的自然图像上几乎无法压缩。因此,虽然技术上支持,但BMP的整体压缩效率远不如PNG(通常使用LZ77等无损压缩算法并配合内部图像元数据优化)和专为压缩设计的JPEG。

    从压缩性和质量保障的视角进行梳理:JPEG采用有损压缩算法,牺牲视觉细节来换取大幅的文件减小;PNG采用无损压缩算法,保留全部图像数据的同时利用LZ77算法压缩像素数据,但文件体积仍然相对较大。这两个特点把BMP格式和JPEG/PNG格式彻底对立起来了,一个偏向细节苛求但体型庞大,一个偏向体型小巧(甚至牺牲部分细节)或保证完整但压缩率不高。

    BMP文件格式的核心由两个关键部分组成:文件头(File Header)和信息头(Information Header / DIB Header)。文件头固定为54字节(某些旧版本或特定配置可能不同,但54字节是常见的标准),其中包含一个非常重要的魔数,通常固定为BM。紧随文件头之后,是图像数据(像素数据块),具体位置由文件头中指出的一个偏移字段确定。

    文件头的具体字段包括:

    1. bfType:一个包含魔数的双字节字段。对于BMP文件,这两个字节通常是BM(十六进制),用于快速识别文件类型。
    2. bfSize:文件的总字节数,包括自身所有的头信息和图像数据。
    3. bfReserved1[2]:字节备用,通常置0。
    4. bfOffBits:从文件开始到图像数据第一个像素前的偏移字节数(通常是54)。
    5. bfSizebfReserved 是文件总大小的概念,但位图数据本质上是连续的原始像素值,除了头部元数据外不做任何修改,即不进行压缩。

    准备好bfTypeBM的BMP文件流,应用程序或查看器只需要转换字节序(对于不自身存储字节序的影响),然后从bfOffBits指向的位置开始解释像素序列即可。BMP和DIB头都采用大端序(Big-Endian),这是与某些原始图像数据(如直通的视频帧缓冲区)关联时考虑的关键点。

    信息头(DIB Header)的大小由字段biSize指定,标准的40字节DIB头(常见的DIB格式)包含了位图的核心参数:

    • biWidth:图像的宽度(像素数)
    • biHeight:图像的高度(像素数),负值表示从上到下存储,通常是0地址对应从上往下扫描的顶部,如果高度为负,则访问顺序是从下到上。
    • biPlanes:颜色平面数,通常仅支持1,现代RGB位图为此字段使用1。
    • biBitCount:每像素的位数,决定了色深:1(单色)、4(16色)、8(256色)、24(真彩色,RGB各8位,共192万色)、32(新增Alpha通道用于透明度)。
    • biCompression:压缩类型,标准BMP未压缩为0,RLE压缩为1,如果需要支持其他压缩则值超过1,但广泛支持的是前两者。
    • biSizeImage:图像数据占用的总字节数。如果未压缩且biBitCount为24/32等,这个值可由公式计算出来;如果使用了RLE压缩或其他压缩方式,则必须由文件头中规定实际占用的空间,可能会更小。
    • biXPelsPerMeterbiYPelsPerMeter:水平和垂直分辨率(像素每米)。
    • biClrUsedbiClrImportant:实际使用的调色板颜色数目和重要色数(高位图通常不使用,为零或全部唯一)。

    为简洁起见,在访问BMP DIB头时,关注上述四个基本字段即可:宽度、高度、位深和压缩方式是解析后图像的必备参数。当应用场景要求理论最短文件大小而是最适合大图减小体积时,BMP的优势荡然无存,数据量仅仅是同等精度原始像素字节数的简单累加。

    综上所述,BMP格式以其简单性和对原始数据的忠实存储,成为历史进程中的重要一环,尤其在Windows图形界面和早期图形软件的追溯性数据支持领域依然发挥作用。但在当代图像处理和存储中,JPEG、PNG等格式凭借更高效的压缩和更多功能,已成为主流标准。

    © 版权声明

    本文由盾科技原创,版权归 盾科技所有,未经允许禁止任何形式的转载。转载请联系candieraddenipc92@gmail.com