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 :

langage c et ppm.. et mes erreurs..


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut langage c et ppm.. et mes erreurs..
    bonjour, je souhaite copier le contenu des couleurs d'une images dans un tableau de la taille de l'image.

    Pour cela, j'ai choisi le format ppm que je "reformate" en supprimer le P3 (ou Px) et la taille de 'limage.
    Je suis en noir et blanc donc une dimension suffit.

    j'ai le code suivant :

    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
    int main(void)
    {
    	FILE *image=fopen("image.ppm","r");
    	FILE *sortie=fopen("sortie.ppm","w");
    	int h=0,l=0,i,d=0;
    	ImageTP im_conv;
    	im_conv=InitialiserImageTP(128,128);
     
    	fseek(image,0,SEEK_SET);
    	h=0;l=0;
    	while(getc(image)!= EOF)
    	{
    		fscanf(image,"%d",&d);
    		im_conv.pixels[h][l]=d;
    		h=(h+1)%128;
    		if (h==0) {l=(l+1)%128;}
    	}					
     
    	fseek(image,0,SEEK_SET);
    	fprintf(sortie,"P3\n128 128\n");
    	for(l=0;l<128;l++)
    		for(h=0;h<128;h++)	
    	{
    		fprintf(sortie,"%d\n",im_conv.pixels[h][l]);
    		printf("%d\n",im_conv.pixels[h][l]);
    	}
     
    	fclose(image);
    	fclose(sortie);
    	return 0;
    }
    Et là pas grand-chose marche : la première partie (le "while(getc)") ne copie même pas chaque termes dans le tableau , je pense à une erreur dans mes incrémentations mais je ne la vois pas.

    Autre chose, quand je li chaque caractères directement (via un printf) le premier est tronquer : ex : j'ai 255 et j'écrit 55.

    Enfin la deuxième partie (les deux for) ne m'écrit pas du tout ce que je veux.

    Je ne m'y connais pas trop en lecture de fichier donc si quelqu'un peut me sortir de l'impasse ça me débloquerait la situation...surtout que j'ai plusieurs fontions qui attendent d'être testée.

  2. #2
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    ah oui, j'ai oublié :

    ImageTP est un type un peu compliqué que j'ai récupérer d'un TP qu'un ami a fait ; il contient la hauteur, largeur du tableau et la couleur de ses pixels via le tableau nom.pixels[][].

  3. #3
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(getc(image)!= EOF)
    	{
    		fscanf(image,"%d",&d);
    		im_conv.pixels[h][l]=d;
    		h=(h+1)%128;
    		if (h==0) {l=(l+1)%128;}
    	}
    L'erreur vient probablement de la partie en rouge.
    fgetc() lit le caractère suivant depuis le flux stream et
    renvoie ce caractère, lu sous forme unsigned char, puis
    transformé en int, ou EOF en cas d'erreur ou de fin de
    fichier.

    getc() est équivalent à fgetc() sauf qu'il peut être
    implementé sous forme de macro, qui évalue l'argument
    stream plusieurs fois.
    En fait le premier caractère est lu par getc.

    a+

  4. #4
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    j'ai essayé les deux mais ça ne change rien...je ne vois pas comment faire autrement. le fscanf ne suufit pas je pense et getc mé "mange un caractère"...
    et ça ne m'explique pas pourquoi mon tableau "rate" : j'ai regarder les indices h, le dernier est 2 et non 127!

  5. #5
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    pour le reste de mes problèmes je pense que je me suis tromper au niveau de la lecture du ppm, j'ai 3*128*128 lignes donc pour mon images (128x128) 3 entiers par pixel. J e retest ce soir aprés conversion en P2 (je crois).

  6. #6
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    ou est le problème ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char c;
              while((c=getc(image)!=EOF){
              // c est le caractère lu à chaque tour de boucle
              }
    Maintenant, tout dépend de la structure de ton fichier.

Discussions similaires

  1. Je vois pas mes erreurs
    Par étoile de mer dans le forum Débuter
    Réponses: 13
    Dernier message: 25/09/2008, 16h10
  2. Mes erreurs, prendre de bonnes habitudes
    Par Goodgame dans le forum Langage
    Réponses: 4
    Dernier message: 08/08/2008, 20h43
  3. customErrors sans trace de mes erreurs
    Par dudule dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/06/2007, 19h08
  4. Mes erreurs ne sont pas soulignées (D2005)
    Par Vincent BONNAL dans le forum Delphi
    Réponses: 3
    Dernier message: 20/03/2007, 15h22
  5. Réponses: 7
    Dernier message: 02/12/2005, 14h02

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