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.
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
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 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); }
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.
Partager