zoukankan      html  css  js  c++  java
  • BMP位图之1位位图(一)

    起始结构

    typedef struct tagBITMAPFILEHEADER {

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

    DWORD bfSize; //文件大小

    WORD bfReserved1; //保留字

    WORD bfReserved2; //保留字

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

    } BITMAPFILEHEADER;

    对应数据

    WORD bfType : 0x4d42

    DWORD bfSize:0x16cbe

    WORD bfReserved1:0x0

    WORD bfReserved2:0x0

    DWORD bfOffBits:0x3e

    紧跟着是

    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:0x1

    DWORD biCompression:0x0

    DWORD biSizeImage:0x16c80

    LONG biXPelsPerMeter:0x0

    LONG biYPelsPerMeter:0x0

    DWORD biClrUsed:0x0

    DWORD biClrImportant:0x0

    1位位图有调色板2^1=2个

    对应是以下结构的数组

    typedef struct tagRGBQUAD {

    BYTE rgbBlue; //蓝色

    BYTE rgbGreen; //绿色

    BYTE rgbRed; //红色

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

    } RGBQUAD;

    索引0:(B,G,R,A)=(0x0,0x0,0x0,0x0)

    索引1:(B,G,R,A)=(0xff,0xff,0xff,0x0)

    之后都是数据区,数据紧密排列,无对齐操作

    此1位位图,数据区操作方法:每次取一个字节,此字节的第7位到第0位是读取顺序。

    代码实现

    由于采用CreateDIBSection可以让微软自带的GDI去解析(包括解码压缩类型),我们需要做的就是定位位图的数据区域就行了。具体实现代码,放在本系列的最后!!!

  • 相关阅读:
    ##JDBC
    《人月神话》阅读笔记(三)
    《人月神话》阅读笔记(二)
    《人月神话》阅读笔记(一)
    记账小软件开发(网页版)(四)
    记账小软件开发(网页版)(三)
    记账小软件开发(网页版)(二)
    记账小软件开发(网页版)(一)
    课程信息管理系统
    Java课程作业之动手动脑(六)
  • 原文地址:https://www.cnblogs.com/dalgleish/p/9569600.html
Copyright © 2011-2022 走看看