分析一张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的
28h - Windows 3.1x, 95, NT, …
0Ch - OS/2 1.x
F0h - OS/2 2.x
这里是0C, 一般windows下的都是28h,看看这里会不会在标准里面定义; 特殊格式,
不是常规的 28H windows bmp 格式
好复杂啊 {:biggrin:}{:biggrin:}{:biggrin:}{:biggrin:} 本帖最后由 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]