#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
void main()
{
/* BMP文件头 */
typedef struct
{
unsigned short bfType; /* 文件类型 */
unsigned long bfSize; /* 文件大小 */
unsigned short bfReserved1; /* 保留位 */
unsigned short bfReserved2; /* 保留位 */
unsigned long bfOffBits; /* 数据偏移位置 */
} HEAD;
/* BMP信息头 */
typedef struct
{
unsigned long biSize; /* 此结构大小 */
long biWidth; /* 图像宽度 */
long biHeight; /* 图像高度 */
unsigned short biPlanes; /* 调色板数量 */
unsigned short biBitCount; /* 每个象素对应的位数,24:24位图,32:带alpha通道的24位图 */
unsigned long biCompression; /* 压缩 */
unsigned long biSizeImage; /* 图像大小 */
long biXPelsPerMeter;/* 横向分辨率 */
long biYPelsPerMeter;/* 纵向分辨率 */
unsigned long biClrUsed; /* 颜色使用数 */
unsigned long biClrImportant; /* 重要颜色数 */
}BMPINFOHEADER;
FILE *file ;
HEAD bmpFile;
BMPINFOHEADER bmpInfo;
/* 打开文件 */
file = fopen("LENNA.BMP", "rb");
if (file== NULL)
{
printf(" openning error\n");
}
/* 读入文件头 */
fread(&bmpFile, sizeof(HEAD)-2,1, file);/* sizeof(HEAD)-2是为了使内存对齐*/
if (bmpFile.bfType != 0x4D42)
{
printf(" reading error!!!");
}
printf("%x\n",bmpFile.bfType); /* 验证文件类型 */
printf("%ld\n",bmpFile.bfSize);
printf("%ld\n",bmpFile.bfOffBits);
/* 读信息头 */
fread(&bmpInfo, sizeof(BMPINFOHEADER), 1, file);
printf("%ld\n",bmpInfo.biSizeImage);
printf("%d\n",bmpInfo.biWidth);
printf("%d\n",bmpInfo.biHeight);
printf("%d\n",bmpInfo.biBitCount);
}
就是读一个位图的信息,我读的是一个512*512的灰度图象。
结果是:
4d42
4
-859045888
0
512
512
8
printf("%ld\n",bmpFile.bfSize);
printf("%ld\n",bmpFile.bfOffBits);
printf("%ld\n",bmpInfo.biSizeImage);
这三个怎么读的数据不对啊??是什么原因?