Citation :
 
 // Enregistre une image dans un fichier : format bmp
 int Save_BMP_Ex(char* nom_fichier,int largeur,int hauteur,GLubyte* mem) {
  // Fichier bmp non compressé 24bits
   FILE*         fichier;
   int           position_tampon=54;
   int           position_image=0;
   int           taille_donnees_fichier=0;
   int           complement=0;
   GLubyte*      tampon=(GLubyte*)NULL;
    // initialisation des données
   complement=(largeur*3)%4;
   if (complement>0) {
     complement=4-complement;
     }
   taille_donnees_fichier=54+((largeur*3)+complement)*hauteur;
    // création du tampon
   tampon=(GLubyte*)malloc(sizeof(GLubyte)*taille_donnees_fichier);
   if (tampon==(GLubyte*)NULL) {
     return(0);
     }
    // remlissage du tampon
  // entete
   tampon[ 0]='B';
   tampon[ 1]='M';
  // taille du fichier
   tampon[ 2]=taille_donnees_fichier & 255;
   tampon[ 3]=(taille_donnees_fichier >> 8) & 255;
   tampon[ 4]=(taille_donnees_fichier >> 16) & 255;
   tampon[ 5]=(taille_donnees_fichier >> 24) & 255;
  // inutilisé
   tampon[ 6]=0;
   tampon[ 7]=0;
   tampon[ 8]=0;
   tampon[ 9]=0;
  // adresse des données
   tampon[10]=54;
   tampon[11]=0;
   tampon[12]=0;
   tampon[13]=0;
  // taille de l'entete
   tampon[14]=40;
   tampon[15]=0;
   tampon[16]=0;
   tampon[17]=0;
  // taille image : largeur et hauteur
   tampon[18]=largeur & 255;
   tampon[19]=(largeur >> 8) & 255;
   tampon[20]=(largeur >> 16) & 255;
   tampon[21]=(largeur >> 24) & 255;
   tampon[22]=hauteur & 255;
   tampon[23]=(hauteur >> 8) & 255;
   tampon[24]=(hauteur >> 16) & 255;
   tampon[25]=(hauteur >> 24) & 255;
  // nombre de plan
   tampon[26]=1;
   tampon[27]=0;
  // nombre de couleur
   tampon[28]=24; // 24 bits
   tampon[29]=0;
  // format de compression (aucune=0)
   tampon[30]=0;
   tampon[31]=0;
   tampon[32]=0;
   tampon[33]=0;
  // taille de l'image : ta mère
   tampon[34]=0;
   tampon[35]=0;
   tampon[36]=0;
   tampon[37]=0;
  // resolution horizontale : 2834ppm
   tampon[38]=18;
   tampon[39]=11;
   tampon[40]=0;
   tampon[41]=0;
  // resolution verticale : 2834ppm
   tampon[42]=18;
   tampon[43]=11;
   tampon[44]=0;
   tampon[45]=0;
  // nombre de couleurs utilisées : ?
   tampon[46]=0;
   tampon[47]=0;
   tampon[48]=0;
   tampon[49]=0;
  // nombre de couleurs importantes : ?
   tampon[50]=0;
   tampon[51]=0;
   tampon[52]=0;
   tampon[53]=0;
  // image
   for (int i=0;i<hauteur;i++) {
     for (int j=0;j<largeur;j++) {
       tampon[position_tampon  ]=mem[position_image+2];
       tampon[position_tampon+1]=mem[position_image+1];
       tampon[position_tampon+2]=mem[position_image  ];
       position_tampon=position_tampon+3;
       position_image=position_image+3;
       }
     position_tampon=position_tampon+complement;
     }
    // Ouverture du fichier
   fichier = fopen(nom_fichier,"wb" );
   if (fichier==(FILE*)NULL) {
     free(tampon);
     return(0);
     }
    // Ecriture du fichier
   fseek(fichier,0,0);
   if (fwrite(tampon,1,taille_donnees_fichier,fichier)!=taille_donnees_fichier) {
     free(tampon);
     return(0);
     }
    // fin
   free(tampon);
   fclose(fichier);
   return(1);
 }
   |