/* VIEWBMP.C this file opens 16 color images and not 256 color images as TURBO C supports only 16 colors only. email: chingpongin@yahoo.co.in PLEASE VOTE ME !!!! */ #include #include #define BYTE unsigned char #define WORD unsigned int #define DWORD unsigned long /*STRUCTURE OF BITMAP FILE HEADER*/ /* FILE HEADER */ struct fileheader { char bftype[2]; DWORD bfsize; WORD bfreserved1; WORD bfreserved2; DWORD bfoffbits; }; /* IMAGE INFORMATION HEADER */ struct bitmapinfoheader { DWORD bisize; DWORD biwidth; DWORD biheight; WORD biplanes; WORD bibitcount; DWORD bicompression; DWORD bisizeimage; DWORD bixpelspermeter; DWORD biypelspermeter; DWORD biclrused; DWORD biclrimportant; }; /* PALETTE HEADER*/ struct colortable { BYTE rgbblue; BYTE rgbgreen; BYTE rgbred; BYTE rgbreserved; }; /* COMMAND LINE ARGUMENTS */ void main(int argc,char *argv[ ]) { 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(argv[1],"rb"))==NULL) { clrscr( ); gotoxy(10,10); printf("bmp file %s does not exist",argv[1]); 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",argv[1]); 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\nBITMAPINFO 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,""); /*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 contains 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); }