我想读取位于头部的位图,但fread正在为我跳过字符。Fread跳过字符读入对象
我使用这个的typedef在我的头:
#include <windows.h> // Used for other
#include <cstdio>
typedef struct tagBITMAPHEADER{
WORD wFileType;
DWORD dwFileSize;
WORD dwReserved;
WORD dwReserved2;
DWORD dwBmpDataOffset;
DWORD dwBmpHeaderSize;
DWORD dwWidth;
DWORD dwHeight;
WORD wPlanes;
WORD wBitsPerPixel;
DWORD dwCompression;
DWORD dwBitmapDataSz;
DWORD dwHRes;
DWORD dwVRes;
DWORD dwColors;
DWORD dwImpColors;
} BITMAPHEADER, *PBITMAPHEADER;
而且在我的代码,我只使用一个简单的fopen和FREAD二进制。
#include "ImageLoader.h"
BITMAPHEADER pbhFileInfo;
FILE *fBitmap = fopen(FileName,"rb"); //Open file in read/binary
if (fBitmap) //File is now open
{ fread(&pbhFileInfo,sizeof(BITMAPFILEHEADER),1,fBitmap);
fclose(fBitmap);
}
虽然我的位图 '424DF25A0D'(十六进制)开始,前两个变量读取似乎跳过 'F25A'
wFileType =覆盖0x4D42 dwFileSize = 0x0000000d
任何想法可能会起来?
在此先感谢。
所以你偶然发现了struct padding。你还应该阅读关于排序。如果你真的希望你的代码独立于数据大小,struct padding,并且处理所有类型的字节顺序,你应该手动解码这些信息并把它放在你的头文件结构中。这显然是更多的工作,但也更可靠。 – 2010-01-11 03:18:03