Tout d'abord bonjour
voilà je suis en plein dans (la tentative de) la programmation d'un compresseur d'image en C
Mais un problème réside : je stock l'image dans un pointeur, à l'aide d'une fonction "void ouvrir_fichier(struct image *image)"
mais impossible d'utiliser le pointeur en dehors de la fonction ouvrir_fichier
bon je vous passe les bout de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int main(int argc, char** argv) { struct taille taille; struct image *image = NULL; unsigned char *entete = NULL; unsigned char *temp = NULL; taille=taille_fichier(argv[1]); ouvrir_fichier(taille,argv[1],temp,entete,image); printf("x : %d\ny : %d\nbleu : %d\nvert : %d\nrouge : %d\n" ,image[60].x,image[60].y,image[60].bleu,image[60].vert,image[60].rouge); }Voilà en esperant que vous pourrez m'aider, je vous remercie d'avance
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 void ouvrir_fichier(struct taille taille,char *file,unsigned char *temp,unsigned char *entete,struct image *image) { int i; FILE *fichier; entete = malloc (54 * sizeof *entete); temp = malloc( taille.taille * sizeof *temp ); image=malloc(taille.taille* sizeof *image); if (image == NULL || temp == NULL || entete == NULL) { fprintf(stderr,"Allocation impossible \n"); exit(EXIT_FAILURE); } //Ouverture du Fichier fichier=fopen(file,"rb"); if(!fichier) { printf("Erreur d'ouverture du fichier"); exit(-1); } //Copie de l'entete de l'image fread(entete,1,54,fichier); if (entete == NULL) { printf("Erreur de copie de l'entete"); exit(-1); } //Copie de l'image fread(temp,1,taille.taille,fichier); if (temp == NULL) { printf("Erreur de copie de l'image"); exit(-1); } fclose(fichier); //Traitement de l'image for(i=0;i<(taille.largeur)*(taille.hauteur);i=i+3) { image[i].bleu=temp[i]; image[i].vert=temp[i+1]; image[i].rouge=temp[i+2]; image[i].x=i%taille.largeur; image[i].y=(i-(i%taille.largeur))/taille.largeur; } // Liberation de la mémoire allouée à *temp free(temp); }
EDIT : je joint les fichiers sources complets si besoin...
Partager