problème écriture fichier ppm
Bonjour ! Je suis actuellement en train de coder un interpréteur pour un petit langage graphique et l'idée est la suivante:
On a un fichier par exemple test.ipi qui comporte 2 lignes : à la première ligne on a un nombre qui nous indique la taille de l'image à produire puis la deuxième ligne nous indique une série de lettre ex : asdlccfjfdhdb et chaque lettre va avoir un effet sur l'image.
Donc finalement à partir de se fichier, on aimerait construire une image et renvoyer sur la sortie standard l'image correspondante au format PPM .
On va raisonner avec des calques, un curseur et des pixels. On considère une pile qui peut contenir au max 10 calques et on va faire des choses avec ex: déplacer le curseur, fonction de remplissage, fusion de calque etc...
Le calque est un tableau à 2 dimensions et qui contient des pixels.
Maintenant que le contexte est posé ( j'espère que j'ai été assez clair ), je me retrouve face à un problème lorsque je veux écrire mon fichier PPM.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void ppm_image(calque ca,char *chemin){
FILE *f;
f=fopen(chemin,"w");
if(f==NULL){
perror("[fopen]");
exit(5);
}
// on écrit le format classique d'un fichier ppm
fprintf(f,"P6\n%d %d\n255\n",ca.w,ca.h); // ca.weidth et ca.height -> la largeur et la hauteur de mon calque
fwrite(ca.tab,sizeof(pixel),ca.w*ca.h,f); // ca.tab = ca.tableaudepixel
fclose(f);
} |
Quand je teste mon programme avec un calque noir, j'obtiens bien un fichier test.ppm mais quand je l'ouvre avec ImageMagick ça me met : insufficient image data in file ''là où se trouve mon fichier'' @ error/pnm.c/ReadPNMImage/443
Et puis je ne suis même pas sur de mon fwrite pour écrire les couleurs dans mon fichier ppm, au final j'aimerai obtenir quelque chose du style:
P6
5 5
255
(0 0 0) (0 0 0) ( 0 0 0) ( 0 0 0) (0 0 0)
(0 0 0) (0 0 0) ( 0 0 0) ( 0 0 0) (0 0 0)
(0 0 0) (0 0 0) ( 0 0 0) ( 0 0 0) (0 0 0)
(0 0 0) (0 0 0) ( 0 0 0) ( 0 0 0) (0 0 0)
(0 0 0) (0 0 0) ( 0 0 0) ( 0 0 0) (0 0 0)
mais je ne sais pas comment écrire les "(0 0 0) (0 0 0) ( 0 0 0) ( 0 0 0) (0 0 0)"
(0 0 0) (0 0 0) ( 0 0 0) ( 0 0 0) (0 0 0)
etc...
j'ai pensé à initialiser un buffeur de unsigned char pour stocker chaque couleur de mes pixels
Ou encore, j'ai aussi pensé à utiliser une double boucle for pour parcourir chaque pixel de mon calque et de les réécrires dans le fichier mais ça n'a pas marché .
Désolé pour le dérangement et pour ce gros pavé !!
Je vous remercie par avance.