• bitmap格式分析


    我们来看看位图文件(*.BMP)的格式。
    位图文件主要分为如下3个部分:
    块名称
    对应Windows结构体定义
    大小(Byte
    文件信息头
    BITMAPFILEHEADER
    14
    位图信息头
    BITMAPINFOHEADER
    40
    RGB颜色阵列
    BYTE*
    由图像长宽尺寸决定
    1、   文件信息头BITMAPFILEHEADER
    结构体定义如下:
    typedef struct tagBITMAPFILEHEADER { /* bmfh */
    UINT bfType;  
    DWORD bfSize; 
    UINT bfReserved1; 
    UINT bfReserved2; 
    DWORD bfOffBits;
    } BITMAPFILEHEADER;
    其中:
    bfType
    说明文件的类型,该值必需是0x4D42,也就是字符'BM'。
    bfSize
    说明该位图文件的大小,用字节为单位
    bfReserved1
    保留,必须设置为0
    bfReserved2
    保留,必须设置为0
    bfOffBits
    说明从文件头开始到实际的图象数据之间的字节的偏移量。这个参数是非常有用的,因为位图信息头和调色板的长度会根据不同情况而变化,所以你可以用这个偏移值迅速的从文件中读取到位数据。
    2、位图信息头BITMAPINFOHEADER
    结构体定义如下:
    typedef struct tagBITMAPINFOHEADER { /* bmih */
    DWORD biSize; 
    LONG biWidth; 
    LONG biHeight; 
    WORD biPlanes; 
    WORD biBitCount; 
    DWORD biCompression; 
    DWORD biSizeImage; 
    LONG biXPelsPerMeter; 
    LONG biYPelsPerMeter; 
    DWORD biClrUsed; 
    DWORD biClrImportant;
    } BITMAPINFOHEADER;
    其中:
    biSize
    说明BITMAPINFOHEADER结构所需要的字数。
    biWidth
    说明图象的宽度,以象素为单位。
    biHeight
    说明图象的高度,以象素为单位。注:这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值是一个正数,说明图像是倒向的,如果该值是一个负数,则说明图像是正向的。大多数的BMP文件都是倒向的位图,也就是时,高度值是一个正数。
    biPlanes
    为目标设备说明位面数,其值将总是被设为1。
    biBitCount
    说明比特数/象素,其值为1、4、8、16、24、或32。但是由于我们平时用到的图像绝大部分是24位和32位的,所以我们讨论这两类图像。
    biCompression
    说明图象数据压缩的类型,同样我们只讨论没有压缩的类型:BI_RGB
    biSizeImage
    说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0
    biXPelsPerMeter
    说明水平分辨率,用象素/米表示。
    biYPelsPerMeter
    说明垂直分辨率,用象素/米表示。
    biClrUsed
    说明位图实际使用的彩色表中的颜色索引数(设为0的话,则说明使用所有调色板项)。
    biClrImportant
    说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。
    3、RGB颜色阵列
    有关RGB三色空间我想大家都很熟悉,这里我想说的是在Windows下,RGB颜色阵列存储的格式其实BGR。也就是说,对于24位的RGB位图像素数据格式是:
    蓝色B
    绿色G
    红色R
    对于32位的RGB位图像素数据格式是:
    蓝色B
    绿色G
    红色R
    透明通道A
    透明通道也称Alpha通道,该值是该像素点的透明属性,取值在0(全透明)到255(不透明)之间。对于24位的图像来说,因为没有Alpha通道,故整个图像都不透明。
     
    行对齐
    由于Windows在进行行扫描的时候最小的单位为4个字节,所以当
    图片宽 X 每个像素的字节数 = 4的整数倍
    时要在每行的后面补上缺少的字节,以0填充(一般来说当图像宽度为2的幂时不需要对齐)。
     
    注意:
    bmp文件的RGB数据第一行表示的是LCD最后一行的数据
  • 相关阅读:
    python线程的几种创建方式
    python进程之间的通信——Queue
    python中进程的几种创建方式
    python中的生成器、迭代器、闭包、装饰器
    java中String和StringBuffer的区别
    python中的元类介绍
    宣传片制作技巧
    树莓派创建WiFi热点
    PCB布线要求
    jsoncpp linux平台编译和arm移植
  • 原文地址:https://www.cnblogs.com/chd-zhangbo/p/5725679.html
Copyright © 2020-2023  润新知