This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

.bmp file

hi
i am writing a c program for converting a *.bmp file to its equivalent hex file.i have written the following code
but i am not able to get the pixel information .i want information if file is monochrome that is 1bit/pixel format.

#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<math.h>
long extract(FILE *,long ,int );void information(FILE *);long extract(FILE *fp1,long offset,int size)
{unsigned char *ptr;unsigned char temp='0';long value=0L;
int i;//to initialize the ptrptr=&temp;//sets the file pointer at specific position i.e. after the offset
fseek(fp1,offset,SEEK_SET);//now extracting (size) values starting from the offset
for(i=1;i<=size;i++){fread(ptr,sizeof(char),1,fp1);value=(long)(value+(*ptr)*(pow(256,(i-1)))); //combining the values one after another in a single variable
}return value;}
void information(FILE *fp1){FILE *fp4;if((fp4=fopen("info.txt","w"))==NULL)
{printf("naError while creating a file.nSystem is exiting ..... ");exit(0);}
fprintf(fp4,"Header Information");
fprintf(fp4,"nnThe Magic Number or Signatur of the file : %c%c",(char)extract(fp1,0L,1),(char)extract(fp1,1L,1));
fprintf(fp4,"nThe size of the file : %ld bytes",extract(fp1,2L,4));
fprintf(fp4,"nUnused reserve data, application specific : ",extract(fp1,6L,2));
fprintf(fp4,"nUnused reserve data, application specific : ",extract(fp1,8L,2));
fprintf(fp4,"nThe offset where the bitmap data or pixel can be found : %d bytes",(int)extract(fp1,10L,4));
fprintf(fp4,"nThe number of bytes in the header (after this point) : %d bytes",(int)extract(fp1,14L,4));
fprintf(fp4,"nThe width of the bitmap in pixel : %d pixel",(int)extract(fp1,18L,4));
fprintf(fp4,"nThe height of the bitmap in pixel : %d pixel",(int)extract(fp1,22L,4));
fprintf(fp4,"nNumber of color planes being used : %d plane",(int)extract(fp1,26L,2));
fprintf(fp4,"nThe number of bits/pixel : %d bits",(int)extract(fp1,28L,2));
fprintf(fp4,"nCompression style : %d ",(int)extract(fp1,30L,4));
fprintf(fp4,"nThe size of the raw bmp data(after the header) : %d bytes",(int)extract(fp1,34L,4));
fprintf(fp4,"nThe horizontal resolution of the image : %d pixels/meter",(int)extract(fp1,38L,4));
fprintf(fp4,"nThe vertical resolution of the image : %d pixels/meter",(int)extract(fp1,42L,4));
fprintf(fp4,"nNumber of colors in the palette : %d colors",(int)extract(fp1,46L,4));
fprintf(fp4,"nImportant colors : %d colors",(int)extract(fp1,50L,4));
} void main(void)
{int row,col;int i,j,k;int dataoffset,offset;char magicnum[2];
FILE *fp1,*fp2;clrscr();if((fp1=fopen("abc.bmp","rb"))==NULL)
{ printf("anCant open the image.nSystem is exiting.");
goto exitcode;}
//setting the file pointer at the beginning
//fseek(fp1,0L,SEEK_SET);rewind(fp1);
//CHECKING WHETHER THE FILE IS IN BMP FORMAT OR NOT, WE CHECK THE MAGIC NUMBER OF THE FILE, MAGIC NUMBER'S OFFSET IS 0 i.e. IT'S STORED AT THE FRONT OF THE IMAGE, AND THE SIZE IS 2
//at first extracting the magic number
for(i=0;i<2;i++){magicnum[i]=(char)extract(fp1,i,1);
} //now checking
if((magicnum[0]=='B') && (magicnum[1]=='M'));
else{
printf("aThe image is not a bitmap image.nSystem is exiting ...... ");
goto exitcode;
} //storing the header information
information(fp1);//get the starting position or offset of the data(pixel)
dataoffset=(int)extract(fp1,10,4);
printf("dataoffset=%dn",dataoffset);//get the number of rows
row=(int)extract(fp1,22,4);
printf("row=%dn",row);
//get the number of columnscol=(int)extract(fp1,18,4);
printf("column=%dn",col);
//storing the data
if((fp2=fopen("pixel.txt","wb"))==NULL)
{ printf("anError while creating a file.nSystem is exiting....");
goto exitcode;}
offset=dataoffset;
for(j=0;j<col;j++)
{ for(k=0;k<row;k++)
{ for(i=0;i<3;i++)
{fprintf(fp2,"%d",(int)extract(fp1,offset++,1));fprintf(fp2," ");
}fprintf(fp2," ");
} fprintf(fp2,"n");
offset+=2;
} printf("nFor image information see info.txt.nFor pixels see pixel.txt.");
exitcode: fcloseall()getch();
}

please help

0