• BMP位图之8位位图(三)


    起始结构

    typedef struct tagBITMAPFILEHEADER {

    WORD bfType; //类型名,字符串“BM”,

    DWORD bfSize; //文件大小

    WORD bfReserved1; //保留字

    WORD bfReserved2; //保留字

    DWORD bfOffBits; //实际位图数据的偏移字节数,即前三个部分长度之和

    } BITMAPFILEHEADER;

    对应数据

    WORD bfType : 0x4d42

    DWORD bfSize:0xb6836

    WORD bfReserved1:0x0

    WORD bfReserved2:0x0

    DWORD bfOffBits:0x436

    紧跟着是

    typedef struct tagBITMAPINFOHEADER{

    DWORD biSize; //指定此结构体的长度,0x28

    LONG biWidth; //位图宽

    LONG biHeight; //位图高.为正,表示从下往上存储,左下角是起点。为负,表示从上往下储存,左上角是起点

    WORD biPlanes; //平面数,为1

    WORD biBitCount //采用颜色位数,可以是1,2,4,8,16,24,32

    DWORD biCompression; //压缩方式,可以是0,1,2,其中0表示不压缩

    DWORD biSizeImage; //实际位图数据占用的字节数

    LONG biXPelsPerMeter; //X方向分辨率

    LONG biYPelsPerMeter; //Y方向分辨率

    DWORD biClrUsed; //使用的颜色数,如果为0,则表示默认值(2^颜色位数)

    DWORD biClrImportant; //重要颜色数,如果为0,则表示所有颜色都是重要的

    } BITMAPINFOHEADER;

    对应数据

    DWORD biSize:0x28

    LONG biWidth:0x480

    LONG biHeight:0x288

    WORD biPlanes:0x1

    WORD biBitCount:0x8

    DWORD biCompression:0x0

    DWORD biSizeImage:0xb6400

    LONG biXPelsPerMeter:0x0

    LONG biYPelsPerMeter:0x0

    DWORD biClrUsed:0x0

    DWORD biClrImportant:0x0

    1位位图有调色板2^8=256个,总共256*4=0x400个字节,加上0x36,正好是偏移地址0x436

    对应是以下结构的数组

    typedef struct tagRGBQUAD {

    BYTE rgbBlue; //蓝色

    BYTE rgbGreen; //绿色

    BYTE rgbRed; //红色

    BYTE rgbReserved; //保留值,常用于Alpha透明值

    } RGBQUAD;

    调色板太多省略

    其余是数据区域,关于8位位图,有两种。本随笔中展示的是BI_RGB(未压缩),另一种是BI_RLE8(数据区数据压缩),压缩方式请参考下面微软的官方链接.

    原理地址:https://docs.microsoft.com/zh-cn/windows/desktop/gdi/bitmap-compression

  • 相关阅读:
    redis05
    redis04
    redis03
    redis02
    C++编程学习(九)this指针&友元函数
    C++编程学习(八)new&delete动态内存分配
    ROS大型工程学习(二) 怎么阅读大型工程
    计算机操作系统学习(一) Linux常用指令(随时更新)
    ROS大型工程学习(一) 必须了解的基本文件
    单片机学习(一) 中断、定时器、优先级的一些理解
  • 原文地址:https://www.cnblogs.com/dalgleish/p/9575638.html
Copyright © 2020-2023  润新知