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 :

PGM vers PPM


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 64
    Par défaut PGM vers PPM
    Bonsoir à tous,

    J'ai implémenté une fonction permettant de lire un format en PGM et j'aimerais le faire pour un fichier PPM mais je ne vois pas comment modifier les boucles for pour que ca fasse ce que je souhaite.

    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
    int i, j;
      char d;
     
      char header [100], *ptr;
      ifstream ifp;
     
      ifp.open(fname, ios::binary | ios::in);
     
      if (!ifp)
      {
        cout << "Can't read image: <" << fname << '>' << endl;
        exit(1);
      }
     
      ifp.getline(header,100,'\n');
      if((header[0]!='P') || header[1]!='6')   /* 'P5' Formay */
      {
        cout << "Image <" << fname << "> is not in binary PGM 'P5' format." << endl;
        exit(1);
      }
     
      ifp.getline(header,100,'\n');
     
      M=strtol(header,&ptr,0);
      cout << M;
      N=atoi(ptr);
     
      ifp.getline(header,100,'\n');
     
      Q=strtol(header,&ptr,0);
     
      *fimage = new int* [N];
      for(i=0; i<N; i++)
        (*fimage)[i] = new int[M];
     
     
     
      for(i=0; i<N; i++)
      {
        for(j=3; j<M; j++)
        {
          d = ifp.get();
          (*fimage)[i][j]= (int)d;
          cout << (*fimage)[i][j] << " ";
        }
     
        cout << endl;
     
      }

    Merci à vous.

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Si tu l'as implémenté, tu sais comment elle est faite, et tu as certainement lu la spécification du format PGM.
    A présent, il te suffit de faire la même chose pour PPM.

    A moins que tu ne souhaites écrire un convertisseur de PGM vers PPM.

  3. #3
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Moi ce qui me choque, c'est que ce bout ne code ne compilera pas et ne fera pas ce qu'on veut, donc bon. ça sent le mec qui a pondu un truc qui fonctionne pas et vient demander qu'on le fasse à sa place en corrigeant tout ^^ (ensuite je peux me tromper ).

    Il serait bien d'expliciter le problème rencontré, les recherches effectuées .....

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    De manière générale, un std::getline sur un fichier ouvert en mode binaire... Ca me fait déjà froid dans le dos, vu qu'un retour à la ligne prend différentes formes hexadécimales en fonction de l'architecture et peut être
    • 0x0D 0x0A (CRLF)
    • 0x0A (LF)
    • 0x0D (CR)


    Si tu veux lire un format binaire, peut être devrais tu t'inspirer de cette entrée dans la FAQ. A partir de là, tu commencera tout doucement à pouvoir faire quelque chose de correct

    Au fait :
    • tu utilises std::ifstream... Tu n'as donc absolument pas besoin de transmettre ios::in comme flag d'ouverture (c'est implicite dans le fait que tu aies un flux d'entrée)
    • au lieu d'invoquer le constructeur par défaut suivi de la fonction open, tu devrais invoquer directement le constructeur qui prend le nom du fichier (et le mode d'ouverture), histoire d'avoir un "objet directement utilisable" (*)



    (*) l'idée derrière ce conseil est que, en choisissant le bon constructeur, tu n'as plus à t'inquéter de "ce qui doit être fait" avant de pouvoir manipuler correctement ton objet... C'est autant de risques d'erreur en moins
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/12/2012, 22h50
  2. image ppm vers pgm avec visual c++
    Par nawal1000 dans le forum Windows
    Réponses: 2
    Dernier message: 09/12/2007, 13h42
  3. Réponses: 3
    Dernier message: 01/02/2004, 21h24
  4. Réponses: 2
    Dernier message: 30/05/2002, 10h19
  5. Réponses: 1
    Dernier message: 13/05/2002, 09h19

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