| 12
 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;
 
      } | 
Partager