可能昏头了,请大家看看,我拷贝MSDN里面BITMAPFILEHEADER的结构定义,改名如下,
typedef struct tagBITMAPFILEHEADER2 {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER2, *PBITMAPFILEHEADER2; void LoadFile(const char* pszDibFileName)
{
BITMAPFILEHEADER2 bitmapFileHeader2;
FILE * pf = NULL;
pf = fopen(pszDibFileName, "r");
if( !pf) return; fread( &bitmapFileHeader2, sizeof(BYTE), sizeof(BITMAPFILEHEADER2), pf );
}在WINDOWS下跟踪,第一句 我把 BITMAPFILEHEADER2换为VC自己的BITMAPFILEHEADER就可以,用BITMAPFILEHEADER2就不行。可这个结构和BITMAPFILEHEADER完全一样啊。
typedef struct tagBITMAPFILEHEADER2 {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER2, *PBITMAPFILEHEADER2; void LoadFile(const char* pszDibFileName)
{
BITMAPFILEHEADER2 bitmapFileHeader2;
FILE * pf = NULL;
pf = fopen(pszDibFileName, "r");
if( !pf) return; fread( &bitmapFileHeader2, sizeof(BYTE), sizeof(BITMAPFILEHEADER2), pf );
}在WINDOWS下跟踪,第一句 我把 BITMAPFILEHEADER2换为VC自己的BITMAPFILEHEADER就可以,用BITMAPFILEHEADER2就不行。可这个结构和BITMAPFILEHEADER完全一样啊。
int n1 = sizeof(bitmapFileHeader);//14
int n2 = sizeof(bitmapFileHeader2);//16我从MSDN拷贝下来的结构,内存占用居然不一样。难道MS 的BITMAPFILEHEADER的定义不是MSDN里面所描述的那样??
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER2, *PBITMAPFILEHEADER2; #pragma pack(pop) // 还原
到这里来看看
我也怀疑是对齐问题,只是不知道怎么做,用老兄的方法已经搞定。