Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/12/2011, à 13:06

abdallah

Ecrire une image pgm

Bonjour,
je veux savoir que veut dire:
FILE *f = fopen("image.ppm", "w");       
   fprintf(f, "P3\n%d %d\n%d\n", w, h, 255);
   for (int i=0; i<w*h; i++)
     fprintf(f,"%d %d %d ", int value1, int value2, int value3);

}

et est-ce qu'on peut utiliser la meme chose pour ecrire un code pour une image pgm mais avec P5 au lieu de P3 et que dire P3 et P5.
j'ai vraiment recherche le web mais y'a pas d'exp seulement des exemple..
comment je peux placer la valeur de chaque pixel j'ai utiliser plusieurs methodes mais ca n'a pas marche..
merci.

Hors ligne

#2 Le 26/12/2011, à 15:07

pingouinux

Re : Ecrire une image pgm

Bonjour,
Les rensignements sont là : .PPM / PGM / PBM image files
Il faut mettre P2 au lieu de P3, pour que le fichier soit en ASCII, et ne donner qu'une seule valeur par pixel, au lieu de trois.

Hors ligne

#3 Le 26/12/2011, à 15:14

abdallah

Re : Ecrire une image pgm

oui merci pour l'aide mais je veux savoir comment je peux utiliser la fonction fprintf pour ecrire une image moi j'ai defini l'image en faisant:
File f..
fprintf(f,"P5 /n%d%d/n",width, heigh);
puis de for (i=0;i<width;i++){
for(j=0;j<heigh;j++){
fprintf(f,"%d",grey value);//la je met pour chaque pixel sa valeur mais ca n'a pas marche, comment je peux la faire?
}}

alors j'ai ecrit

fprintf(f,"P5 /n%d%d/nd/n",width, heigh,255);//255 valeur de blanc.
puis de for (i=0;i<width*heigh;i++)
fprintf(f,"%d",grey value);


le grey value meme si je la met 0 ou 255 j'aurai une image avec la couleur gris foncee pourquoi?

Dernière modification par abdallah (Le 26/12/2011, à 15:33)

Hors ligne

#4 Le 26/12/2011, à 17:00

pingouinux

Re : Ecrire une image pgm

Voici un exemple qui tourne. L'image étant décrite ligne par ligne, la boucle extérieure doit être sur la hauteur. Ici, on obtient un dégradé vertical de gris (noir en haut (couleur=0), blanc en bas (couleur=255)).

#include <stdio.h>

main() {
   FILE *f=fopen("/tmp/image.pgm","w");
   int width=100, height=255, coul_max=255; // Largeur, Hauteur, Couleur maximum d'un pixel
   int i, j, grey;

   fprintf( f, "P2\n%d %d\n%d\n", width, height, coul_max);

   for(j=0;j<height;j++){
      grey=j;
      for (i=0;i<width;i++){ fprintf(f,"%d ",grey); } fprintf(f,"\n");
   }
   fclose(f);
}

Hors ligne

#5 Le 26/12/2011, à 17:26

abdallah

Re : Ecrire une image pgm

merci bcp alors je ne sais pas c'est quoi le problème car j'ai écrit le même code et j'ai eut une image toute grise.

Hors ligne

#6 Le 26/12/2011, à 17:38

pingouinux

Re : Ecrire une image pgm

Je veux bien regarder ton code. Tu l'envoies en faisant un copier-coller, et en le mettant entre balises-codes (<>).

Hors ligne

#7 Le 26/12/2011, à 17:49

abdallah

Re : Ecrire une image pgm

c'est ca : moi j'ai un long code en haut mais c'est ce que j'essaye de faire avant de terminer mon code:
j'essaye de voir si les couleurs sont correcte:

    FILE *f = fopen("image.pgm", "w");         // Write image to PPM file.
  fprintf(f, "P5\n%d %d\n %d\n", 1024, 768,255);//255 couleur max.
  for (int i=0; i<1024*768;i++)
    fprintf(f,"%d",255);

j'essaye de remplir une image en blanc tout est gris et n'importe quel nb je met je recoit le meme resultat->gris..

Hors ligne

#8 Le 26/12/2011, à 18:30

pingouinux

Re : Ecrire une image pgm

Il fallait mettre P2 (format ASCII), au lieu de P5 (format "raster").
Pour avoir l'autre format (P5), if faut faire un write binaire pour les couleurs des pixels :

   f=fopen("/tmp/image1.pgm","w");
   fprintf( f, "P5\n%d %d\n%d\n", width, height, coul_max);

   for(j=0;j<height;j++){
      grey=j;
      for (i=0;i<width;i++){ fwrite( &grey, 1, 1, f ); }
   }
   fclose(f);

On obtient ainsi un fichier beaucoup plus petit.

Hors ligne

#9 Le 26/12/2011, à 18:43

abdallah

Re : Ecrire une image pgm

j'ai mis ton code mais rien n'a change tout est gris.

Hors ligne

#10 Le 26/12/2011, à 18:53

pingouinux

Re : Ecrire une image pgm

Tu as dû commettre une erreur en le recopiant. Voici le code complet qui utilise les deux formats, et crée deux images /tmp/image.pgm et /tmp/image1.pgm. L'image est un dégradé de gris identique dans les deux cas.

#include <stdio.h>

main() {
   int width=100, height=255, coul_max=255; // Couleur maximum d'un pixel
   int i, j, grey;

   FILE *f=fopen("/tmp/image.pgm","w");
   fprintf( f, "P2\n%d %d\n%d\n", width, height, coul_max);

   for(j=0;j<height;j++){
      grey=j;
      for (i=0;i<width;i++){ fprintf(f,"%d ",grey); } fprintf(f,"\n");
   }
   fclose(f);

   f=fopen("/tmp/image1.pgm","w");
   fprintf( f, "P5\n%d %d\n%d\n", width, height, coul_max);

   for(j=0;j<height;j++){
      grey=j;
      for (i=0;i<width;i++){ fwrite( &grey, 1, 1, f ); }
   }
   fclose(f);
}

Hors ligne

#11 Le 26/12/2011, à 19:00

abdallah

Re : Ecrire une image pgm

ok ce code a fonctionne chez moi je vais essayer de corriger mon code smile merci bcp.

Hors ligne