| #include <stdio.h> #define FAR far #define NEAR near #define VOID void typedef char CHAR; typedef short SHORT; typedef long LONG; typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER; typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER; void main() { FILE *fp; int i,j,SizeFileHeader,SizeInfoHeader; int MapHeight,MapWidth,DataNumPerLine; BITMAPFILEHEADER fileheader; BITMAPINFOHEADER infoheader; unsigned char**data; fp=fopen("d:\\bmp.bmp","rb"); SizeFileHeader=sizeof(BITMAPFILEHEADER); SizeInfoHeader=sizeof(BITMAPINFOHEADER); fread(&fileheader,SizeFileHeader,1,fp); fread(&infoheader,SizeInfoHeader,1,fp); MapHeight=infoheader.biHeight; MapWidth=infoheader.biWidth; DataNumPerLine=(MapWidth+3)/4*4; data=(unsigned char**)malloc(MapHeight*sizeof(unsigned char*)); for(i=0;i<MapWidth;i++) data[i]=(unsigned char*)malloc(DataNumPerLine*sizeof(unsigned char)); for(i=0;i<256*4;i++) fgetc(fp); for(i=0;i<MapHeight;i++) fread(data[i],DataNumPerLine,1,fp); fclose(fp); }
|