opening jpeg file in c++

M

mohi

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 ..

what could be wrong ??

or what is the best way to read a binary file such as an image ??

thanks a lot
mohan gupta
 
J

Juha Nieminen

mohi said:
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).
 
J

James Kanze

mohi wrote:
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.

I rather doubt that he gets that far.
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 most probably reason his code even compiles is that he's
working in C, not in C++. It won't compile with any C++
compiler I've ever used.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top