typedef struct BITMAPFILEHEADER
{
short bfType;
long bfSize;
short bfReserved1;
short bfReserved2;
long bfOffBits;
}BITMAPFILEHEADER;
BITMAPFILEHEADER bitmapfileheader;
typedef struct BITMAPINFOHEADER
{
long biSize;
long biWidth;
long biHeight;
short biPlanes;
short biBitCount;
long biCompression;
long biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
long biClrUsed;
long biClrImportant;
}BITMAPINFOHEADER;
typedef struct RGBQUAD
{
unsigned char rgbBlue;
unsigned char rgbGreen;
unsigned char rgbRed;
unsigned char rgbReserved;
}RGBQUAD;
typedef struct BITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[256];
}BITMAPINFO;
BITMAPINFO bitmapinfo;
int main()
{
FILE* fp;
if((fp=fopen("test.bmp","wb"))==NULL)
{
printf("cannot open the file");
return 0;
}
fseek(fp,0,0);
bitmapfileheader.bfType=0x4D42;
bitmapfileheader.bfReserved1=0;
bitmapfileheader.bfReserved2=0;
bitmapfileheader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFO)-2;
bitmapfileheader.bfSize=bitmapfileheader.bfOffBits+10000;
bitmapinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bitmapinfo.bmiHeader.biWidth=100;
bitmapinfo.bmiHeader.biHeight=100;
bitmapinfo.bmiHeader.biPlanes=1;
bitmapinfo.bmiHeader.biBitCount=8;
bitmapinfo.bmiHeader.biCompression=0;
bitmapinfo.bmiHeader.biSizeImage=0;
bitmapinfo.bmiHeader.biXPelsPerMeter=0;
bitmapinfo.bmiHeader.biYPelsPerMeter=0;
bitmapinfo.bmiHeader.biClrUsed=0;
bitmapinfo.bmiHeader.biClrImportant=0;
bitmapinfo.bmiColors[0].rgbBlue=0;
bitmapinfo.bmiColors[0].rgbGreen=0;
bitmapinfo.bmiColors[0].rgbRed=0;
bitmapinfo.bmiColors[0].rgbReserved=0;
bitmapinfo.bmiColors[1].rgbBlue=0;
bitmapinfo.bmiColors[1].rgbGreen=0;
bitmapinfo.bmiColors[1].rgbRed=80;
bitmapinfo.bmiColors[1].rgbReserved=0;
bitmapinfo.bmiColors[2].rgbBlue=0;
bitmapinfo.bmiColors[2].rgbGreen=80;
bitmapinfo.bmiColors[2].rgbRed=0;
bitmapinfo.bmiColors[2].rgbReserved=0;
bitmapinfo.bmiColors[3].rgbBlue=0;
bitmapinfo.bmiColors[3].rgbGreen=80;
bitmapinfo.bmiColors[3].rgbRed=80;
bitmapinfo.bmiColors[3].rgbReserved=0;
for(int i=4;i<256;i++)
{
bitmapinfo.bmiColors[i].rgbBlue=0;
bitmapinfo.bmiColors[i].rgbGreen=0;
bitmapinfo.bmiColors[i].rgbRed=80;
bitmapinfo.bmiColors[i].rgbReserved=0;
}
long l=ftell(fp);
fwrite(&bitmapfileheader.bfType,2,1,fp);
l=ftell(fp);
fwrite(&bitmapfileheader.bfSize,4,1,fp);
l=ftell(fp);
fwrite(&bitmapfileheader.bfReserved1,2,1,fp);
l=ftell(fp);
fwrite(&bitmapfileheader.bfReserved2,2,1,fp);
l=ftell(fp);
fwrite(&bitmapfileheader.bfOffBits,4,1,fp);
l=ftell(fp);
fwrite(&bitmapinfo,sizeof(BITMAPINFO),1,fp);
for(i=0;i<100;i++)
for(int j=0;j<100;j++)
{
if((0<=j)&&(j<=24))
fprintf(fp,"%c",0);
else if((25<=j)&&(j<=49))
fprintf(fp,"%c",1);
else if((50<=j)&&(j<=74))
fprintf(fp,"%c",2);
else
fprintf(fp,"%c",3);
}
return 0;
}
用c语言编写8位的位图,生成的图片如下: