mohi wrote:
hello everyone ,
i am trying to read a jpeg image through c++ but is unable to do so ,
presently i tried it with code in c as i use something like ;
FILE * fp=fopen("./x.jpg","rb");
int c;
do{
fread(fp,&c,sizeof(c));
if( c==(int) 0xFF23){
do.....
do....
}
printf("%x",c);
}
while(c!=EOF);
but the problem is the if condition never evalutes to true as i know
that according to the jpeg standard there should be market with value
0xFFD8 and others also .....and also the printf() of integer 'c' as
hex is never displayed it just displays a blank ..
In which system are you running this? If you are running it in a unix
shell, the prompt might be overwriting what that printf() printed
because you are not printing a newline character at the end.
The most probable reason for the if() to fail is that you are probably
reading 4 bytes rather than 2 (I will assume in your system 'int' is
32-bit), and will have something completely different from 0xFF23 even
if the first two bytes in the input file had those values.
The surest (and most portable) way of making that work is that you do
indeed read two bytes explicitly, one byte at a time, and either compare
them directly to those two values, or construct an integer with those
types (with shifting and bit-orring).
One typical technique to read and interpret the header data of a
binary file (such as an image file) is to read the header data into an
array (of unsigned chars), and then reading individual bytes as
necessary from that array. This is the easiest way to quickly get all
the header info from such a file (assuming the header has a fixed format).