zoukankan      html  css  js  c++  java
  • BMP图像存储格式 (转)

    BMP有单色,16色,256色,24位,32位几种类型位图。

    BMP在磁盘上是按以下顺序存储的:

    ---------------header部分开始----------------

    [位图文件头TBitmapFileHeader] // 14个字节

    [位图信息头TBitmapInfo] // 40个字节

    --------------- body部分开始 ----------------

    [图像数据BGRA] // 32位位图含Alpha值


    (1)位图文件头

    1
    2
    3
    4
    5
    6
    7
    typedef struct tagBITMAPFILEHEADER { // bmfh
    WORD bfType; // 文件标识‘BM’
    DWORD bfSize; // 用字节表示的整个文件的大小
    WORD bfReserved1; // 保留字节,为0
    WORD bfReserved2; // 保留字节,为0
    DWORD bfOffBits; // 图象数据RGBA的起始地址的偏移值 为54
    } BITMAPFILEHEADER;

    (2)位图信息头

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct tagBITMAPINFOHEADER{ // bmih
    DWORD biSize; // 位图信息头(Bitmap Info Header)的长度,为40
    LONG biWidth; // 位图的宽度,以象素为单位
    LONG biHeight; // 位图的高度,以象素为单位
    WORD biPlanes; // 位图的位面数(注:该值将总是1)
    WORD biBitCount // 每个象素的位数,设为24(表示24Bit位图)
    DWORD biCompression; // 压缩说明,设为0(不压缩)
    DWORD biSizeImage; // 用字节数表示的位图数据的大小(该数必须是4的倍数)
    LONG biXPelsPerMeter; // 用象素/米表示的水平分辨率 (一般设为0)
    LONG biYPelsPerMeter; // 用象素/米表示的垂直分辨率(一般设为0)
    DWORD biClrUsed; // 位图使用的颜色数(一般设为0)
    DWORD biClrImportant; // 指定重要的颜色数(一般设为0)
    } BITMAPINFOHEADER;

    (3)图像数据BGRA

    单色: 1个bit表示1个像素

    16色: 4个bit表示1个像素

    256色: 8个bit表示1个像素

    24位: 24个bit表示1个像素 //BGR

    32位: 32个bit表示1个详述 //BGRA

    *** 数据存放顺序 ***

    (4)需要注意的几点

    a. 像素中个颜色分量顺序为 BGRA -- Blue Green Red Alpha

    以下是RGB宏的定义

    1
    2
    3
    #define RGB(r, g ,b) ((DWORD) (((BYTE) (r) | \
    ((WORD) (g) << 8)) | \
    (((DWORD) (BYTE) (b)) << 16)))

    可通过BYTE GetRValue(DWORD rgb) BYTE GetGValue(DWORD rgb) BYTE GetBValue(DWORD rgb)来获取各个分量的值。

    b. 对于数据区域而言,每行的数据它必须凑满4字节,如果没有满,则用冗余的数据来补齐。

    如:对于24位位图,假设一行有w个像素,那么一行的像素数为:4*((3*w+3)/4) // 注意(3*w+3)/4是在做整除操作

    转:http://www.cnblogs.com/kekec/archive/2011/08/04/2127297.html

  • 相关阅读:
    Ajax beforeSend和complete 方法与防止重复提交
    tablesorter周边文档
    对委托的一些短浅理解
    Nginx核心要领五:worker_processes、worker_connections设置
    二进制安装k8s 教程
    安装 Docker Engine-Community
    centos7.x 安装 NodeJS、yarn、pm2
    cfssl
    k8s各个进程 占用内存大小
    Linux下查看某一进程所占用内存的方法
  • 原文地址:https://www.cnblogs.com/tianya10319/p/2282589.html
Copyright © 2011-2022 走看看