zoukankan      html  css  js  c++  java
  • BMP文件格式

    BMP(Bitmap-File)图像文件,又叫位图文件,是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。Windows系统内部个图像绘制操作以BMP为基础的。一个BMP文件由四个部分组成。

    • l  位图文件头
    • l  位图信息段
    • l  调色板
    • l  位图数据

    一个BMP文件,可以用代码表示,如下:

    typedef struct tagBITMAP_FILE
    {
        BITMAPFILEHEADER bitmapheader;
        BITMAPINFOHEADER bitmapinfoheader;
        PALETTEENTRY palette[256];
        UCHAR *buffer;            //UCHAR大小1字节(通BYTE)
    }BITMAP_FILE;

    BMP文件头:BITMAPFILEHEADER

    typedef struct tagBITMAPFILEHEADER{
      WORD bfType;
      DWORD bfSize;
      WORD bfReserved1;
      WORD bfReserved2;
      DWORD bfOffbits;
    }

    bfType

    说明文件的类型,该值必须是0x4D42,也就是字符‘BM’,否则表示根本不是BMP

    bfSize

    说明位图文件的大小,用字节为单位

    bfReserved1

    保留,必须设置为0

    bfReserved2

    保留,必须设置为0

    bfOffBits

    说明从文件头开始到实际的图像数据之间的字节的偏移量。因为位图信息头和调色板的长度会根据不同情况而变化,所以需要用这个偏移值迅速的从文件中读取到为数据

    位图信息段:BITMAPINFOHEADER

    typedef struct tagBITMAPINFOHEADER
    {
            DWORD bitSize;
            LONG    bitWidth;
            LONG    biHeight;
            WORD    biPlanes;
            WORD    bitBitCount;
            DWORD    bitCompression;
            DWORD    bitSizeImage;
            LONG    bitXPelsPerMeter;
            LONG    bitYPelsPerMeter;
            DWORD    biClrUsed;
            DWORD    biClrImporant;
    }BITMAPINFOHEADER;

    bitSize

    说明BITMAPINFOHEADER结构所需要的字节数

    bitWidth

    说明像素的宽度,以像素为单位

    biHeight

    说了像素的高度,以像素位单位。

    这个值还说明该图像是倒立的图还是正向的图。

    如果该值是整数,说明图像是倒向的,即:数据的第一行其实是图像的最后一行

    如果该值是一个负值,则图像是正向的。

    大多数的BMF文件都是倒立的,也就是说,高度值是一个正数

    biPlanes

    表示bmp图片的平面属,显然显示器只有一个平面,所以恒为1

    bitBitCount

    说明比特数/像素,其值为1、4、8、16、24、32

    bitCompression

    说明图像压缩的类型,其中:

    BI_RGB:没有压缩

    BI_RLE8:每个像素8比特的RLE压缩编码,压缩格式由2字节组成

    BI_RLE4:每个像素4比特的RLE压缩编码,压缩格式由2字节组成

    BI_BITFIELDS:每个像素的比特由指定的掩码决定

    BI_JPEG:JPEG格式

    bitSizeImage

    说明图像的大小,以字节为单位。当用BI_RGB格式时,可以设置为0

    bitXPelsPerMeter

    说明水平分辨率,用像素/米表示

    bitYPelsPerMeter

    说明垂直分辨率,用像素/米表示

    biClrUsed

    说明位图实际使用的彩色表中的颜色索引数(0表示使用所以的调色版项)

    biClrImporant

    说明对图像显示有重要影响的颜色索引的数目,如果是0,表示很重要

    调色板

    1. 对于200*200像素,颜色数为16的彩色图。每个像素用R、G、B三个分量表示,每个分量有256个级别,用8位,也就是一个字节,所有每个像素就要用到3个字节。整个图像就要用200*200*3的大小内存来存储。

    如果16色图在途中最多有16种颜色。可以采用一个表,表中每一行记录一种颜色的R、G、B值。这样当我们表示一个色素的颜色时,只需要指出该颜色在第几行,即该颜色的索引值即可。比如如果表第0行表示255,0,0(红色),那么当某个色素为红色时,只需要标注0即可。

    16种颜色用4bit表示,所以一个像素只需要用到半个字节。整个图像只用200*200*0.5+3*16个字节。

    这张R、G、B表就是调色板,另一种叫法是颜色查找表。

    typedef struct tagPALETTENTRY
    {
            BYTE peRed;
            BYTE peFreen;
            BYTE peBlue;
            BYTE peFlags;
    }PALETTEENTRY;
  • 相关阅读:
    Windows安装node.js
    02ARM体系结构
    01ARM介绍
    01软件过程模型
    创建一个JavaWeb工程
    python之面向对象01
    python学生管理系统
    python文件、文件夹的相关操作
    python文件的定位读写
    python文件的写入与备份
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11635166.html
Copyright © 2011-2022 走看看