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

C++ Discussion :

récupérer un gros buffer


Sujet :

C++

  1. #1
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut récupérer un gros buffer
    Bonjour à tous!

    Sous VC++.net, je récupère un buffer *Images de type unsigned short.
    Voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    long nbimages = image_fin - image_deb;
    unsignedshort *Images=NULL;
    CImgl <unsignedshort> liste;
     
    for (int i=0; i<nbimages; i++) {
           CImg <unsignedshort> image (&Images[i*77120], 320, 241, 1, 1);
           liste.push_back(image);
    }
    
    Seulement, cette bouble plante au bout de 21 itérations, alors que nbimages vaut environ 4700 !

    J'ai l'impression que le souci vient de &Images[i*77120]..

    Quelqu'un aurait une meilleure idée pour remplacer ce code maison?

    Merci d'avance...

  2. #2
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Salut !

    Un truc que je pige pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     CImg <unsignedshort> image (&Images[i*77120], 320, 241, 1, 1);
    C'est fait pour récupérer ce qu'il y a dans Images ?

    Parce que comme dans le code que tu donnes, Images est NULL, tu seras pas avancé...

    Et oui c'est bizarre ce i*77120, tu peux en dire plus sur le but de la manoeuvre ?
    (si i peut valoir 4700, alors 4700*77120 = 362 464 000... ça veut dire que ton tableau Images doit arriver jusque là... C'est le cas ?)
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Il faudrait savoir ce que fait le constructeur de CImg...

    parce que là, tu lui passes &Images[i*77120]

    commes Images vaut NULL, tu lui passes en fait i*77120

    càd un pointeur qui pointe à peu près n'importe où, mais certainement pas dans un espace alloué
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  4. #4
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    auh oui pardon j'avais pas mis tout le code nécessaire... Autant pour moi ...
    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
    
    CImgl <unsignedshort> importData (int numchoc, int camera, long image_deb, long image_fin) {
    int cr;
    long nbimages = image_fin - image_deb;
    unsignedshort *Images=NULL;
    CImgl <unsignedshort> liste;
    cr = IRimages(36181,1L,100L,120L,&Images); // récupère et stocke les images dans le buffer 
                         //(image ligne par ligne)
    if (cr != 0) {
           std::cout << "erreur de communication avec le serveur" << std::endl;
    }
    else {
        for (int i=0; i<nbimages; i++) {
                  CImg <unsignedshort> image (&Images[i*77120], 320, 241, 1, 1);
                  liste.push_back(image);
          }
          free(Images);
          return liste;
          }
    }
    
    Le constructeur CImg construit une image à partir d'un buffer, suivi des dimensions de l'image (pour savoir quand aller à la ligne)!

    En gros, je parcours le buffer en lui donnant pour chaque image l'adresse du premier pixel. 320 * 241 = 77120. Donc les adresses utiles sont situés tous les 77120 cases mémoires!

    J'espère vous avoir éclairé !

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    OK

    dans ce cas là, il faudrait vérifier que tu ne dépasses pas la longueur du tableau...si IRimages ne te renvoie pas le nombre d'images attendu, tu va dépasser ton tableau à un moment
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  6. #6
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par Swoög
    Dans ce cas là, il faudrait vérifier que tu ne dépasses pas la longueur du tableau...si IRimages ne te renvoie pas le nombre d'images attendu, tu va dépasser ton tableau à un moment
    oui, c'est sur!
    Que penses-tu de l'algo? Il n'y aurait pas une meilleure manière de récupérer ce buffer?
    Moi j'avais l'impression que, comme l'a fait remarqué mathieu_t, l'adressage par offset est trop "gros" : 4000 * 77120, ça commence à faire pas mal, non?
    J'ai pas l'impression que je dépasse mon tableau. Je sais qu'il y a 30 secondes de films avec un pas de 20 ms, soit plus que 20 images !
    Bien entendu, je peux me planter, surtout si le paramère reçu est mauvais, mais bon...

    Je comprend pas trop...

  7. #7
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    OULAAAAAAAA !!!
    J'ai fait une grosse erreur... Au temps pour moi tu avais raison Swoög !!!
    Je suis nul, il n'y avait bien que 20 images... donc à 21 ça plante!
    Jusque là, tout va bien !!

    Merci !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2008, 19h20
  2. Réponses: 2
    Dernier message: 01/02/2008, 09h42
  3. Buffering et gros fichier
    Par jforks dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 28/12/2007, 19h30
  4. Récupérer un tableau 2 dimensions depuis un buffer.
    Par Crepuscule3 dans le forum C++
    Réponses: 0
    Dernier message: 03/12/2007, 13h08
  5. Réponses: 2
    Dernier message: 03/01/2007, 18h17

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