miaoguoqiang 发表于 2016-5-16 17:15:21

分析一张BMP图片数据格式遇到一点问题


第一块是bmp的文件头用于描述整个bmp文件的情况
typedef struct tagBITMAPFILEHEADER {
WORD    bfType;   
DWORD   bfSize;
WORD    bfReserved1;
WORD    bfReserved2;
DWORD   bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

第二块是位图信息头,即BITMAPINFOHEADER,用于描述整个位图文件的情况

typedef struct tagBITMAPINFOHEADER{
DWORD biSize; //表示本结构的大小
LONG biWidth; //位图的宽度
LONG biHeight; //位图的高度
WORD biPlanes; //Specifies the number of planes for the target device. This value must be set to 1.
WORD biBitCount;//位图的位数 分为1 4 8 16 24 32
DWORD biCompression; //本以为压缩类型,但是却另外有作用,稍候解释
DWORD biSizeImage; //表示位图数据区域的大小以字节为单位
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;


但是当我分析到
biWidth位图的宽度
biHeight 位图的高度
的时候,就出现问题了。
大部分图片都是占4个字节,而我的这张图片却只有两个字节。该怎样去区分呢?
通过hex查看分析得到第二块信息应该是这样

DWORD biSize; //表示本结构的大小
WORDbiWidth; //位图的宽度------------------只有2字节
WORDbiHeight; //位图的高度-----------------只有2字节
WORD biPlanes; //Specifies the number of planes for the target device. This value must be set to 1.
WORD biBitCount;//位图的位数 分为1 4 8 16 24 32
-----------------后面的信息都没了

图片大小是640*640的

jm2011 发表于 2016-5-16 18:40:26

28h - Windows 3.1x, 95, NT, …
0Ch - OS/2 1.x
F0h - OS/2 2.x

这里是0C, 一般windows下的都是28h,看看这里会不会在标准里面定义;

Magicfjpg 发表于 2016-5-16 19:10:38

特殊格式,
不是常规的 28H windows bmp 格式

oooios 发表于 2016-5-16 19:28:31

好复杂啊

oooios 发表于 2016-5-16 19:36:24

{:biggrin:}{:biggrin:}{:biggrin:}{:biggrin:}

miaoguoqiang 发表于 2016-5-17 09:03:56

本帖最后由 miaoguoqiang 于 2016-5-17 09:10 编辑

jm2011 发表于 2016-5-16 18:40
28h - Windows 3.1x, 95, NT, …
0Ch - OS/2 1.x
F0h - OS/2 2.x


3Q,这样就好区分了。
对特定的格式分类解析。
页: [1]
查看完整版本: 分析一张BMP图片数据格式遇到一点问题