opening jpeg file in c++

Discussion in 'C++' started by mohi, Oct 31, 2008.

  1. mohi

    mohi Guest

    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
     
    mohi, Oct 31, 2008
    #1
    1. Advertising

  2. 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).
     
    Juha Nieminen, Oct 31, 2008
    #2
    1. Advertising

  3. mohi

    James Kanze Guest

    On Oct 31, 6:10 pm, Juha Nieminen <> wrote:
    > mohi wrote:


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


    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.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
     
    James Kanze, Oct 31, 2008
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. THY
    Replies:
    4
    Views:
    2,298
  2. lovaspillando
    Replies:
    0
    Views:
    1,030
    lovaspillando
    Aug 26, 2007
  3. Ivan Alameda Carballo
    Replies:
    0
    Views:
    491
    Ivan Alameda Carballo
    Aug 26, 2007
  4. mohi

    opening jpeg file in c++

    mohi, Oct 31, 2008, in forum: C++
    Replies:
    9
    Views:
    5,268
    James Kanze
    Oct 31, 2008
  5. mohi

    opening jpeg file in c++

    mohi, Oct 31, 2008, in forum: C Programming
    Replies:
    2
    Views:
    773
    jameskuyper
    Oct 31, 2008
Loading...

Share This Page