//Program Name: Importing Bitmaps //Written By : Joe Willage //Date : //Period : //a:testing.bmp needs to be saved as a 16 color bitmap #include #include #include #include #include #include #include #include #include #include #include #include #define BYTE unsigned char #define WORD unsigned int #define DWORD unsigned long struct fileheader { char bftype[2]; DWORD bfsize; WORD bfreserved1; WORD bfreserved2; DWORD bfoffbits; }; struct bitmapinfoheader { DWORD bisize; DWORD biwidth; DWORD biheight; WORD biplanes; WORD bibitcount; DWORD bicompression; DWORD bisizeimage; DWORD bixpelspermeter; DWORD biypelspermeter; DWORD biclrused; DWORD biclrimportant; }; struct colortable { BYTE rgbblue; BYTE rgbgreen; BYTE rgbred; BYTE rgbreserved; }; //*************************************************************************** //**************************************************************************** void main() { clrscr(); cout.setf(ios::showpoint); cout.setf(ios::fixed); //int driver=VGA; //int mode=VGAHI; //initgraph(&driver, &mode, "\\TC\\BGI"); //**************************************************************************** int gd=DETECT,gm; int i=0, colorno, loop, x, y, higher, lower, color; unsigned long size; unsigned char*ptr; FILE *fp; struct fileheader header; struct bitmapinfoheader info; struct colortable table; struct palettetype pal; //*to check the existence of file *// if ((fp=fopen("a:testing.bmp", "rb"))==NULL) { clrscr(); gotoxy(10,10); printf("bmp file &s does not exist", "testing.bmp"); gotoxy(10, 20); printf("press ENTER to continue...."); getchar(); clrscr(); exit(0); } fseek(fp, 0, SEEK_END); size=ftell(fp); fseek(fp, 0, SEEK_SET); fread(&header, 1, sizeof(header), fp); clrscr( ); //*to check the signature of the bitmap file "BM"*// if(header.bftype[0]!='B' || header.bftype[1]!='M') { gotoxy(10, 10); printf("%s is not a BMP file", "testing.bpm"); gotoxy(10, 20); printf("press ENTER to continue...."); getchar(); clrscr(); exit(1); } fread(&info,1,sizeof(info),fp); //*if required the following BMP header informations can be displayed *// printf("\n\t\t\tBITMAP FILE HEADER"); printf("\nBMPFILE's SIGNATURE= %C", header.bftype[0]); printf("%c",header.bftype[1]); printf("\nSIZE OF BITMAPFILE= %ld",header.bfsize); printf("\nRESERVED1= %d",header.bfreserved1); printf("\nRESERVED2= %d",header.bfreserved2); printf("\nOFFSET TO THE IMAGE DATA = %ld",header.bfoffbits); printf("\n\n\t\t\tBITMAP INFO HEADER"); printf("\n\n\BITMAPINFO HEADER SIZE\t\t\t=%ld", info.bisize); printf("\nIMAGE WIDTH\t\t\t\t= %ld",info.biwidth); printf("\nIMAGE HEIGHT\t\t\t\t= %ld", info.biheight); printf("\nNo. OF PLANES IN THE IMAGE\t\t= %d (usually '1')", info.biplanes); printf("\nBITS REQUIRED TO REPRESENT A PIXEL\t= %d", info.bibitcount); printf("\nCOMPRESSION BIT\t\t\t\t=%ld (0 -if no Compression used)",info.bicompression); printf("\nBYTES REQUIRED FOR IMAGE DATA ALONE\t=%ld", info.bisizeimage); printf("\nbixpelspermeter\t\t\t\t=%ld",info.bixpelspermeter); printf("\nbiypelspermeter\t\t\t\t=%ld",info.biypelspermeter); printf("\nNo. OF COLORS USED\t\t\t=%ld",info.biclrused); printf("\nCOLOR IMPORTANT\t\t\t\t=$ld",info.biclrimportant); getch(); if (info.bibitcount==1) colorno=2; if (info.bibitcount==4) colorno=16; if (info.bibitcount==8) colorno=256; if (info.bibitcount==0) colorno=0; if(info.biclrused!=0) colorno=info.biclrused; initgraph(&gd, &gm, "\\TC\\BGI"); //* to set the palette *// getpalette(&pal); for (loop=0; loop=1;y--) { for (x=1;x<=info.biwidth;x++) { fread(ptr,1,1,fp); color=*ptr; //* Each byte containts two 4-bit data*// lower=color&15; higher=color&240; higher=higher>>4; putpixel(x,y,higher);x++; putpixel(x,y,lower); } } } if (info.bibitcount==8) //*for 256 color image *// { for (y=info.biheight;y>=1;y--) { for (x=1;x<+info.biwidth;x++) { fread(ptr,1,1,fp); color=*ptr; putpixel(x,y,color/16-1); } } } getchar( ); closegraph( ); fclose(fp); }