Pages : 1
#1 Le 26/12/2011, à 12: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, à 14: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, à 14: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, à 14:33)
Hors ligne
#4 Le 26/12/2011, à 16: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, à 16: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, à 16: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, à 16: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, à 17: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, à 17: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, à 17: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, à 18:00
- abdallah
Re : Ecrire une image pgm
ok ce code a fonctionne chez moi je vais essayer de corriger mon code merci bcp.
Hors ligne
Pages : 1