je ne suis trop c.
plus java et c++. j'ai fais du c juste en cours avec des petits exo académique et ca ma toujours paru obsolete mais je veux faire un petit truc et je suis un sur un os. j'ai surtout besoin d'un explication sur ce code.
voici le code en entier. essayez!!!
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
 
typedef struct enteteFichier enteteFichier;
      struct enteteFichier{
         char format [2];					//La signature  indiquant le fichier BMP
         unsigned int sizeFichier;					//La taille totale du fichier en octets 
         unsigned int reserve;						//reservé
         unsigned int BMP_Off;						//offset: adresse de début de l'image
      };
 
typedef struct enteteImage enteteImage;
      struct enteteImage{
          unsigned int sizeEnteteImage;			//taille de l'entète de l'image
          unsigned int BMP_Width;				//largeur de l'image en pixel
          unsigned int BMP_Height;				//hauteur de l'image en pixel
          unsigned short planes;					//Le nombre de plans  vaut toujours 1
          unsigned short bits_per_pixel;			//nombre de bit pour le codage de la couleur
          unsigned int compression;              //méthode de compression
          unsigned int sizeImage;				//La taille totale de l'image en octets
          unsigned int horiz_resolution;			//nombre de pixels par mètre horizontalement 
          unsigned int vert_resolution;			//nombre de pixels par mètre verticalement
          unsigned int color_used;				//Le nombre de couleurs de la palette
          unsigned int important_color;			//Le nombre de couleur important
      }; 
      typedef struct sCoul sCoul;
      struct sCoul{
       unsigned char R;
       unsigned char V;
       unsigned char B;
      };
 
      enteteFichier RecupEnteteFichier(FILE *fpin);
      enteteFichier RecupEnteteFichier(FILE *fpin){
    	  		   		enteteFichier E1;
    	  		   		fread(&E1.format,2,1,fpin);
    	  		   		fread(&E1.sizeFichier,4,1,fpin);
    	  		   		fread(&E1.reserve,4,1,fpin);
    	  		   		fread(&E1.BMP_Off,4,1,fpin);
    	  		   		return E1;  
      }
 
 
      enteteImage RecupEnteteImage(FILE *fpin);
      enteteImage RecupEnteteImage(FILE *fpin){
          	  		   	enteteImage E1;
          	  		   	fread(&E1.sizeEnteteImage,4,1,fpin);
          	  		   	fread(&E1.BMP_Width,4,1,fpin);
          	  		   	fread(&E1.BMP_Height,4,1,fpin);
          	  		   	fread(&E1.planes,2,1,fpin);
          	  		   	fread(&E1.bits_per_pixel,2,1,fpin);
          	  		   	fread(&E1.compression,4,1,fpin);
          	  		   	fread(&E1.sizeImage,4,1,fpin);  
          	  		   	fread(&E1.horiz_resolution,4,1,fpin);
          	  		    fread(&E1.vert_resolution,4,1,fpin);  
          	  		    fread(&E1.color_used,4,1,fpin);
          	  	        fread(&E1.important_color,4,1,fpin);
          	  		   	return E1;  
            }
 
 
      int main ()
      {
 
    	  printf("Entrez le nom de l'image:  ");
              char *nomFichier;
              int i=0,j=0;
              FILE* f;
              FILE* newFile;
              enteteFichier EF;
              enteteImage EI;
              sCoul *couleurs=NULL;
              sCoul *newColors=NULL;
 
              printf("Entrez le nom de l'image:  ");
              scanf("%s",&nomFichier);
              strcat(nomFichier,".bmp");
              printf("%s\n",nomFichier);
              f = fopen(nomFichier,"rb");
 
              if (f == NULL){
            	  printf ("Erreur ...");
            	  exit(-1);
              }
 
              //recuperation de l'entete jusqu'a la longeur en pixels
               EF = RecupEnteteFichier(f);
               EI = RecupEnteteImage(f);    
               //pour commencer au debut de l'image
               fseek(f, EF.BMP_Off, SEEK_SET);
               i=0;
               // allocation dynamique
               couleurs=malloc (EI.BMP_Width*EI.BMP_Height*sizeof(sCoul));
               while (!feof(f)){
                     // ici ca foire
                     fread(&couleurs[i], sizeof(sCoul), 1,f);
                     //les 10 premieres valeurs sont negatives !
                     if(i>=0&&i<11)
                     printf("%d\n",couleurs[i].B );
                     i++;
               }           
               fclose(f); 
               newColors=malloc (EI.BMP_Width*EI.BMP_Height*sizeof(sCoul));
              //modification des pixels  c'est juste pour tester
               while (j<i){
            	   newColors[j].R=255-couleurs[j].R;
            	   newColors[j].V=255-couleurs[j].V;
            	   newColors[j].B-=255-couleurs[j].B;
            	   if(j>=0&&j<11)
            	   printf("%d\n",couleurs[j].B );
            	   j++;
               }
 
              // je crée mon nouveau fichier
              newFile = fopen("Resu.bmp", "wb");
              if (newFile == NULL){
            	  printf ("Erreur ...");
            	  exit(-1);  
              }
 
              fwrite(&EF, sizeof(enteteFichier),1,newFile);
              fwrite(&EI, sizeof(enteteImage),1,newFile);
              //doi je metre la pallette ??
              j=0;
              while(j<i){
                     fwrite(&newColors[j], sizeof(sCoul),1,newFile);
                     j++;
              }  
 
              fclose(newFile);   /* ajoute EOF au fichier et ferme le fichier */
              // affichage de l'entete
              printf("ENTETE DU FICHIER\n\n"); 
              printf("Format: %c%c\n",EF.format[0],EF.format[1]);
              printf("taille: %d octets\n",EF.sizeFichier);
              printf("reservé: %d octets\n",EF.reserve);
              printf("BMP_Off: %d octets \n",EF.BMP_Off);
              printf("\nENTETE DE L'IMAGE\n\n");
              printf("taille de l'entète de l'image: %d octets\n",EI.sizeEnteteImage);
              printf("BMP_Height: %d pixels\n",EI.BMP_Height);
              printf("BMP_Width: %d pixels\n",EI.BMP_Width);
              printf("Le nombre de plans: %d \n",EI.planes);
              printf("nombre de bit par pixel: %d bits\n",EI.bits_per_pixel);
              printf("méthode de compression: %d \n",EI.compression);
              printf("Taille total de l'image: %d octets\n",EI.sizeImage);
              printf("Résolution horizontale: %d \n",EI.horiz_resolution);
              printf("Résolution verticale: %d \n",EI.vert_resolution);
              printf("Nombre de couleur utilisé: %d \n",EI.color_used);
              if(EI.color_used!=0)printf("Nombre de couleur important: %d \n",EI.important_color);
              printf("\n appuyez sur une touche\n");
              printf("taille d'un entier  %d \n",sizeof(int));
              printf("taille d'un char  %d \n",sizeof(char));
              printf("taille d'un short  %d \n",sizeof(short));
              printf("taille d'un sCoul  %d \n",sizeof(sCoul));
              printf("taille d'un enteteFichier  %d \n",sizeof(enteteFichier));
              printf("taille d'un enteteImage  %d \n",sizeof(enteteImage));
 
              getch();
          return EXIT_SUCCESS;
 
      }
le texte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
printf("Entrez le nom de l'image:  ");
ne s'affiche pas et je l'ai mis a deux reprises mais rien. whiy?