24位bmp位图结构有关问题,熟悉图像文件的结构的高手们,求解啊

24位bmp位图结构问题,熟悉图像文件的结构的高手们,求解啊!!!
24位bmp位图结构有关问题,熟悉图像文件的结构的高手们,求解啊


上面的图是一张24位的bmp图片在ultra edit中打开时的屏幕截图,我发现的问题是该文件的结构不太对劲吗,比如:BITMAPFILEHEADER中的第一个参数btype是BM,这是对的,第二个参数bisize是14字节,这是不对的啊,另外第三个和第四个参数本应该为零,但是在这里不等于零啊,最后一个参数正确,是56;请高手帮忙啊,这是为什么????24位bmp位图结构有关问题,熟悉图像文件的结构的高手们,求解啊
上面的图是这张位图的属性屏幕截图,另外:我用MFC读取位图数据结果跟ultra edit一样!!!
------解决方案--------------------
typedef struct tagBITMAPFILEHEADER {
        WORD    bfType; // MB
        DWORD   bfSize; // 14 =本结构 size 
        WORD    bfReserved1; // 随意 CCCC
        WORD    bfReserved2; // CCCC
        DWORD   bfOffBits;   // 0x36
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;

------解决方案--------------------
正确的解释是:
bfType 
Specifies the file type. It must be BM. 
bfSize 
Specifies the size, in bytes, of the bitmap file. 
bfReserved1 
Reserved; must be zero. 
bfReserved2 
Reserved; must be zero. 
bfOffBits 
Specifies the offset, in bytes, from the BITMAPFILEHEADER structure to the bitmap bits. 

写这个文件的 人, 没搞对 。
------解决方案--------------------
    hdr.bfType = 0x4d42;        // 0x42 = "B" 0x4d = "M" 
    // Compute the size of the entire file. 
    hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + 
                 pbih->biSize + pbih->biClrUsed 
                 * sizeof(RGBQUAD) + pbih->biSizeImage); 
    hdr.bfReserved1 = 0; 
    hdr.bfReserved2 = 0; 

    // Compute the offset to the array of color indices. 
    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + 
                    pbih->biSize + pbih->biClrUsed 
                    * sizeof (RGBQUAD); 
//
头 后跟的 BITMAPINFOHEADER 才是 主要的。
------解决方案--------------------
另外还有:
    all= sizeof(BITMAPINFOHEADER);  // 0x28
    all= sizeof(BITMAPV4HEADER);    // 0x6C
    all= sizeof(BITMAPV5HEADER);    // 0x7C


------解决方案--------------------
24位BMP是最简单的了。前面是14字节的BITMAPFILEHEADER,接下来是40字节的BITMAPINFOHEADE,后面就是图像数据。BITMAPINFOHEADE里面有图像的高度和宽度以及图像数据的字节数。图像数据的字节数 = 每行的字节数*行数。
值得注意的是每行的字节数不一定是 宽度*3,有一个4字节对齐。
还有就是图像数据是自下而上逐行排列的。
至于BITMAPFILEHEADE,就这么说吧,校验不严格的读直接读来14个字节就扔掉,我就经常这样。