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