IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

BUFFER D'IMAGE RGB


Sujet :

Traitement d'images

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 54
    Points
    54
    Par défaut BUFFER D'IMAGE RGB
    bonjour,

    j'ai réussio a faire un petit bout de code qui utilise la libjpeg, et qui compresse et décompresse une image en JPEG.
    par contre, je travail avec beaucoup de descripteur de fichier, ou de fichier.
    et j'aimerai en faite, travailler avec des buffer ou les information serai dedans.
    et pour avoir l'image, il me suffirai de "fwrite" le buffer.

    je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
     
    void convjpeg(char * image_buffer,int image_height,int image_width,int quality,char*filename)
    {
     
    struct jpeg_compress_struct cinfo;
     struct jpeg_error_mgr jerr;
      FILE * outfile;               /* target file */
      JSAMPROW row_pointer[1];      /* pointer to JSAMPLE row[s] */
      int row_stride;  
     
      cinfo.err = jpeg_std_error(&jerr);
     jpeg_create_compress(&cinfo);
     
      if ((outfile = fopen(filename, "wb")) == NULL) {
        fprintf(stderr, "can't open %s\n", filename);
        exit(1);
      }
      jpeg_stdio_dest(&cinfo, outfile);
     
      cinfo.image_width = image_width;      /* image width and height, in pixels */
      cinfo.image_height = image_height;
      cinfo.input_components = 3;           /* # of color components per pixel */
      cinfo.in_color_space = JCS_RGB;  
      jpeg_set_defaults(&cinfo);
     
      jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */);
     
     jpeg_start_compress(&cinfo, TRUE);
     
       row_stride = image_width * 3;
     
     
      while (cinfo.next_scanline < cinfo.image_height) {
        /* jpeg_write_scanlines expects an array of pointers to scanlines.
         * Here the array is only one element long, but you could pass
         * more than one scanline at a time if that's more convenient.
         */
        row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
        (void) jpeg_write_scanlines(&cinfo, row_pointer,1);
      }
     
        jpeg_finish_compress(&cinfo);
     
       fclose(outfile);    
     
        jpeg_destroy_compress(&cinfo);
     
      //pour la compression je voudrai récupérer un buffer avec l'image compresser , ou pour la voir il me suffirait de la "fwrite" dans un fichier, en faite si jarrive a avoir que le contenu rgb,sa m'intéresserai.
     
     
     
    }
     
    int Jpg2Bmp( char * pszJpgFile)    //la j'aimerai bein passer un buffer , quelle sont les fonction de traitement qui vont bien ???  je veut récupérer le contenu en RGB pour l'afficher avec les commande des fenetre X11.
    {
      struct jpeg_decompress_struct cinfo;
      struct jpeg_error_mgr jerr;
       djpeg_dest_ptr dest_mgr = NULL;
      FILE * input_file;
      FILE * output_file;
      JDIMENSION num_scanlines;
     
      /* Initialize the JPEG decompression object with default error handling. */
      cinfo.err = jpeg_std_error(&jerr);
      jpeg_create_decompress(&cinfo);
      /* Add some application-specific error messages (from cderror.h) */
    //  jerr.addon_message_table = cdjpeg_message_table;
      jerr.first_addon_message = JMSG_FIRSTADDONCODE;
      jerr.last_addon_message = JMSG_LASTADDONCODE;
     
      /* Open the input file. */
      if ((input_file = fopen(pszJpgFile, "rb")) == NULL) {
          return -1;
      }
     
      /* Open the output file. */
        if ((output_file = fopen("decompressedbmp.bmp", "wb")) == NULL) {
          return -1;
        }
     
      /* Specify data source for decompression */
      jpeg_stdio_src(&cinfo, input_file);
     
      /* Read file header, set default decompression parameters */
      (void) jpeg_read_header(&cinfo, TRUE);
     
      /* Adjust default decompression parameters by re-parsing the options */
      //file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
     
      /* Initialize the output module now to let it override any crucial
       * option settings (for instance, GIF wants to force color quantization).
       */
      dest_mgr = jinit_write_bmp(&cinfo, FALSE);
      dest_mgr->output_file = output_file;
     
      /* Start decompressor */
      (void) jpeg_start_decompress(&cinfo);
     
      /* Write output file header */
      (*dest_mgr->start_output) (&cinfo, dest_mgr);
     
      /* Process data */
      while (cinfo.output_scanline < cinfo.output_height) {
        num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
    					dest_mgr->buffer_height);
        (*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
      }
     
      /* Finish decompression and release memory.
       * I must do it in this order because output module has allocated memory
       * of lifespan JPOOL_IMAGE; it needs to finish before releasing memory.
       */
      (*dest_mgr->finish_output) (&cinfo, dest_mgr);
      (void) jpeg_finish_decompress(&cinfo);
      jpeg_destroy_decompress(&cinfo);
     
      /* Close files, if we opened them */
        fclose(input_file);
        fclose(output_file);
     
      /* All done. */
      return jerr.num_warnings ? -1 : 0;
    }

    les commentaire en fin de compression et debut decompression dise tout.
    Merci.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par aziatedu13 Voir le message
    bonjour,

    j'ai réussio a faire un petit bout de code qui utilise la libjpeg, et qui compresse et décompresse une image en JPEG.
    par contre, je travail avec beaucoup de descripteur de fichier, ou de fichier.
    et j'aimerai en faite, travailler avec des buffer ou les information serai dedans.
    et pour avoir l'image, il me suffirai de "fwrite" le buffer.

    je m'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
     
    void convjpeg(char * image_buffer,int image_height,int image_width,int quality,char*filename)
    {
     
    struct jpeg_compress_struct cinfo;
     struct jpeg_error_mgr jerr;
      FILE * outfile;               /* target file */
      JSAMPROW row_pointer[1];      /* pointer to JSAMPLE row[s] */
      int row_stride;  
     
      cinfo.err = jpeg_std_error(&jerr);
     jpeg_create_compress(&cinfo);
     
      if ((outfile = fopen(filename, "wb")) == NULL) {
        fprintf(stderr, "can't open %s\n", filename);
        exit(1);
      }
      jpeg_stdio_dest(&cinfo, outfile);
     
      cinfo.image_width = image_width;      /* image width and height, in pixels */
      cinfo.image_height = image_height;
      cinfo.input_components = 3;           /* # of color components per pixel */
      cinfo.in_color_space = JCS_RGB;  
      jpeg_set_defaults(&cinfo);
     
      jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */);
     
     jpeg_start_compress(&cinfo, TRUE);
     
       row_stride = image_width * 3;
     
     
      while (cinfo.next_scanline < cinfo.image_height) {
        /* jpeg_write_scanlines expects an array of pointers to scanlines.
         * Here the array is only one element long, but you could pass
         * more than one scanline at a time if that's more convenient.
         */
        row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
        (void) jpeg_write_scanlines(&cinfo, row_pointer,1);
      }
     
        jpeg_finish_compress(&cinfo);
     
       fclose(outfile);    
     
        jpeg_destroy_compress(&cinfo);
     
      //pour la compression je voudrai récupérer un buffer avec l'image compresser , ou pour la voir il me suffirait de la "fwrite" dans un fichier, en faite si jarrive a avoir que le contenu rgb,sa m'intéresserai.
     
     
     
    }
     
    int Jpg2Bmp( char * pszJpgFile)    //la j'aimerai bein passer un buffer , quelle sont les fonction de traitement qui vont bien ???  je veut récupérer le contenu en RGB pour l'afficher avec les commande des fenetre X11.
    {
      struct jpeg_decompress_struct cinfo;
      struct jpeg_error_mgr jerr;
       djpeg_dest_ptr dest_mgr = NULL;
      FILE * input_file;
      FILE * output_file;
      JDIMENSION num_scanlines;
     
      /* Initialize the JPEG decompression object with default error handling. */
      cinfo.err = jpeg_std_error(&jerr);
      jpeg_create_decompress(&cinfo);
      /* Add some application-specific error messages (from cderror.h) */
    //  jerr.addon_message_table = cdjpeg_message_table;
      jerr.first_addon_message = JMSG_FIRSTADDONCODE;
      jerr.last_addon_message = JMSG_LASTADDONCODE;
     
      /* Open the input file. */
      if ((input_file = fopen(pszJpgFile, "rb")) == NULL) {
          return -1;
      }
     
      /* Open the output file. */
        if ((output_file = fopen("decompressedbmp.bmp", "wb")) == NULL) {
          return -1;
        }
     
      /* Specify data source for decompression */
      jpeg_stdio_src(&cinfo, input_file);
     
      /* Read file header, set default decompression parameters */
      (void) jpeg_read_header(&cinfo, TRUE);
     
      /* Adjust default decompression parameters by re-parsing the options */
      //file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
     
      /* Initialize the output module now to let it override any crucial
       * option settings (for instance, GIF wants to force color quantization).
       */
      dest_mgr = jinit_write_bmp(&cinfo, FALSE);
      dest_mgr->output_file = output_file;
     
      /* Start decompressor */
      (void) jpeg_start_decompress(&cinfo);
     
      /* Write output file header */
      (*dest_mgr->start_output) (&cinfo, dest_mgr);
     
      /* Process data */
      while (cinfo.output_scanline < cinfo.output_height) {
        num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer,
    					dest_mgr->buffer_height);
        (*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines);
      }
     
      /* Finish decompression and release memory.
       * I must do it in this order because output module has allocated memory
       * of lifespan JPOOL_IMAGE; it needs to finish before releasing memory.
       */
      (*dest_mgr->finish_output) (&cinfo, dest_mgr);
      (void) jpeg_finish_decompress(&cinfo);
      jpeg_destroy_decompress(&cinfo);
     
      /* Close files, if we opened them */
        fclose(input_file);
        fclose(output_file);
     
      /* All done. */
      return jerr.num_warnings ? -1 : 0;
    }

    les commentaire en fin de compression et debut decompression dise tout.
    Merci.
    Bo,jour, pour cela tu devrait utiliser une autre lib qui le permet comme freeimage ou CxImage

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 54
    Points
    54
    Par défaut PB installation libfreeimage
    bonjour,

    je n'arrive pas a installer le rpm libfreeimage sur mon linux ==> EL4.

    rpm -Uvh libfreeimage.3-3.9.3-7.3.x86_64.rpm

    je souhaite egalement installer le devel, masi si déja le simple ne marche pas...

    j'ai trouger les rpm sur le site "http://download.opensuse.org/repositories/home:/Milliams/openSUSE_10.3/x86_64/".

    Merci.


    il me dit a l'installation que libc.so.69 esrt requis.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Telecharge les source :
    http://freeimage.sourceforge.net/download.html

    Normalement c'est bien fait. Tu as juste as compiler et installer

    [EDIT]
    class pour les fichiers en memoire
    http://freeimage.sourceforge.net/fip/index.html

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 54
    Points
    54
    Par défaut besoin de plus d'explication svp...
    j'ai bien dl le fichier zip, mais je ne sait pas quoi en faire...
    je suis en C eclusivement, et je voit que des fichier c++...
    En plus je suis vraiment newbies dans la programmation et je ne sait pas compiler ce que j'ai telecharger, ou dans quelle ordre, enfin je ne sait pas ce que vous voulez dire par compilez tout ça et installer....
    dsl je suis en train d'apprendre....

    Merci.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par aziatedu13 Voir le message
    j'ai bien dl le fichier zip, mais je ne sait pas quoi en faire...
    je suis en C eclusivement, et je voit que des fichier c++...
    En plus je suis vraiment newbies dans la programmation et je ne sait pas compiler ce que j'ai telecharger, ou dans quelle ordre, enfin je ne sait pas ce que vous voulez dire par compilez tout ça et installer....
    dsl je suis en train d'apprendre....

    Merci.
    des fichier C++??? freeimage est en C.
    as tu lu le fichier README.linux ???

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 54
    Points
    54
    Par défaut
    lol, Merci du conseil !!!! ,
    c'est pas pour rien qu'il sappelle README .
    tout roule, je vais essayer de m'en servir maintenant, merci beaucoup.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par aziatedu13 Voir le message
    lol, Merci du conseil !!!! ,
    c'est pas pour rien qu'il sappelle README .
    tout roule, je vais essayer de m'en servir maintenant, merci beaucoup.
    Le lien sur la doc c'etait pour freeimage+, le wrapper de freeimage pour le C++
    Voila la doc pour freeimage
    http://sourceforge.net/project/downl...mirror=surfnet

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 54
    Points
    54
    Par défaut
    en faite, je veut utiliser cete librairie pour convertir des BMP en JPEG, je l'ai fait avec la libjpeg, masi j'ai remarquer que cette lib ecriver les fichier convertie a chaque fois, alors que moi j'aimerai avoir des buffers contenant les information conpresser et en faire ce que je desire, par exemple les ecrire dans un fichier, ou ce qui m'interesse, les envoyer sur le reseau , masi cela sna les ecrire sur le disk, ( temps d'acces fichier tro long ).
    En effet je souhaite faire une aplication qui convertie et envoie sur un réseau une image très rapidement, voir le plsu rapidement possible.
    Vous pensez que cela serai possible avec cete librairie??
    je pense conparer les temps de traitement aec cette lib et la libjpeg.

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Normalement oui.
    cherche memory dans la doc

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 54
    Points
    54
    Par défaut
    j'ai vue qu'il y avait les fonction de compression et décompression, Zlibcompresse et Zlibuncompresse, mais le codec n'est pas précisé, ou meme le format. je m'attendait a voir uen fonction du style, char *bitmaptoJpEG(...),

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par aziatedu13 Voir le message
    j'ai vue qu'il y avait les fonction de compression et décompression, Zlibcompresse et Zlibuncompresse, mais le codec n'est pas précisé, ou meme le format. je m'attendait a voir uen fonction du style, char *bitmaptoJpEG(...),
    lol.
    cherche cette fonction
    FreeImage_SaveToMemory

  13. #13
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup du temps que vous passez à nous aidez, je pense avoir trouvoer ce que je chercher , y a plus qu'a le mettre en oeuvre .
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence de poids entre des images RGB et en niveau de gris
    Par christophe_halgand dans le forum MATLAB
    Réponses: 5
    Dernier message: 27/01/2008, 00h58
  2. Transposée d'une image RGB
    Par silainos dans le forum Images
    Réponses: 4
    Dernier message: 01/10/2007, 03h45
  3. convertir image RGB en HSV
    Par deb_Sous_Python dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 23/04/2007, 12h25
  4. Réponses: 10
    Dernier message: 18/04/2007, 09h39
  5. Conversion d'une image rgb en hsl
    Par ranell dans le forum Images
    Réponses: 13
    Dernier message: 01/03/2007, 22h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo