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 :

aide sur un programme de conversion


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Points : 0
    Points
    0
    Par défaut aide sur un programme de conversion
    Bonjour j'ai besoin d'aide pour mon programme. En faite l'objectif c'est de convertir une image en pgm mais ça ne marche pas trop :-/
    Voilà mon programme. J'ai vraiment besoin d'aides. Merci

    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
    unsigned char *lire_image_ppm(int longueur, int largeur)
    {
    	unsigned char *image_niveau_de_gris_ppm= NULL;
     
    	char buffer[255];
     
    	int gris_max;
     
    	int x,y,r,g,b,niveau_de_gris_du_pixel;
     
    	FILE *fichierppm;
     
    	fichierppm = fopen("logoppm.ppm","r");
     
    	if (fichierppm == NULL) {
    		perror("Le fichier n'est pas lisible");
    		exit(1);
    	}
     
    	fscanf(fichierppm, "%s", buffer);
    	fscanf(fichierppm, "%d %d", &longueur, &largeur);
    	fscanf(fichierppm, "%d", &gris_max);
     
    	image_niveau_de_gris_ppm=(unsigned char *)malloc(sizeof(unsigned char)*longueur*largeur);
     
        if(strcmp(buffer,"P3") ==0) {
    	for (y=0;y<largeur;y++) {
    		for (x=0;x<longueur;x+=3) {
     
                fscanf(fichierppm,"%d",&niveau_de_gris_du_pixel);
                    fscanf(fichierppm,"%d %d %d",&r,&g,&b);
                    niveau_de_gris_du_pixel=0.299*r+0.587*g+0.114*b;
                }
                fprintf(fichierppm,"%d",niveau_de_gris_du_pixel);
                image_niveau_de_gris_ppm[y*longueur+x]=niveau_de_gris_du_pixel;
            }
        }
    	fclose(fichierppm);
        return image_niveau_de_gris_ppm;
    }

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 192
    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 192
    Points : 17 154
    Points
    17 154
    Par défaut
    Utilise donc directement imagemagick et son programme en ligne de commande convert.

    Alternativement, utilise libmagick (ou libimagemagick, je ne sais plus)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre éprouvé Avatar de I_believe_in_code
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 219
    Points : 1 043
    Points
    1 043
    Par défaut
    Je pense que la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(fichierppm,"%d",&niveau_de_gris_du_pixel);
    et la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fichierppm,"%d",niveau_de_gris_du_pixel);
    sont en trop.

    par ailleurs il y a peut-être des commentaires dans le fichiers que tu lis, entre le "P3" et le couple largeur / hauteur, et ton code ne fonctionnera pas dans ce cas. Il faudrait le modifier pour qu'il "saute" les commentaires.

    Les lignes de commentaires dans ce format commencent par #

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Voici un exemple de code pour convertir une image PPM(P3) en PGM(P2)

    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
     
    //Conversion image PPM P3 en PGM P2
    #include<stdio.h>
    #include<stdlib.h>
     
    unsigned char *ppm3_load(const char *filename, int *w, int *h)
    {
      unsigned char *pix = 0;
      FILE *f_in = fopen(filename, "r");
     
      if(f_in) {
        char buf[32];
        if(fgets(buf, sizeof buf, f_in)) {
          if(buf[0] == 'P' && buf[1] == '3') {
            int c = getc(f_in);
            while(c == '#') {
              while(getc(f_in) != '\n');
              c = getc(f_in);
            }
            ungetc(c, f_in);
            if(fscanf(f_in, "%d %d", w, h) == 2) {
              int max;
              if(fscanf(f_in, "%d", &max) == 1) {
                while(fgetc(f_in) != '\n');
                if(max == 255) {
                  if((pix = malloc(*w * *h * 3))) {
                    int i, r, g, b;
                    for(i = 0; fscanf(f_in, "%d %d %d", &r, &g, &b) == 3; i += 3) {
                      pix[i]     = (unsigned char)r;
                      pix[i + 1] = (unsigned char)g;
                      pix[i + 2] = (unsigned char)b;
                    }
                  }
                }
              }
            }
          }
        }
        fclose(f_in);
      }
      return pix;
    }
     
    int ppm3_to_pgm2(unsigned char *ppm3pix, int width, int height, const char *pgm2name)
    {
      int i;
      FILE *f_out = fopen(pgm2name, "w");
     
      if(f_out) {
        fprintf(f_out, "P2\n#by magma\n%d %d\n255\n", width, height);
     
        for(i = 0; i < width * height * 3; i += 3)
          fprintf(f_out, "%d\n", (ppm3pix[i] + ppm3pix[i + 1] + ppm3pix[i + 2]) / 3);
     
        fclose(f_out);
        return 1;
      }
      return 0;
    }
     
    int main(void)
    {
      int w, h;
      unsigned char *ppm3pix = ppm3_load("image_ppm_P3.ppm", &w, &h);
     
      if(ppm3pix){
        printf("%d x %d\n", w, h);
        printf("Conversion PPM3 en PGM2 : %s\n", ppm3_to_pgm2(ppm3pix, w, h, "image_pgm_P2.pgm") ? "Ok" : "Echec !");
        free(ppm3pix);
      }
     
      return 0;
    }

Discussions similaires

  1. Aide sur un programme Client Serveur
    Par clubmed01 dans le forum Linux
    Réponses: 33
    Dernier message: 29/05/2012, 10h22
  2. Besoin d'aide sur un programme
    Par chuko dans le forum C
    Réponses: 22
    Dernier message: 14/06/2008, 17h33
  3. [VB6] Demande d'aide sur un programme !
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/06/2006, 11h49

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