recherche un fonction pour enregistrer les bitmap

recherche un fonction pour enregistrer les bitmap - Programmation

Marsh Posté le 02-05-2001 à 09:10:55    

j'arrive a lire sans pb les bmps,mais j'ai du mal a les enregistrer (sous VC++), si quelqu'un avait une fonction ou un site pour m'aider...


---------------
"l'homme est un loup pour l'homme"
Reply

Marsh Posté le 02-05-2001 à 09:10:55   

Reply

Marsh Posté le 02-05-2001 à 12:05:07    

ben j'en ai fait une mais je ne l'ai pas ici.
 
Elle enregistre des fichier bmp au format 24bits non compressé uniquement.

Reply

Marsh Posté le 02-05-2001 à 12:35:04    

ouais mais ca y est j'ai réussi, c'est pas facile mais bon :sarcastic:  
 
au faite, j'ai encore un soucis,  
j'arrive a lire tous les fichiers bmp non compressés et en 24 bits/pixels, mais certaines images me resistent, j'ai l'impression qu'il y a un decalage, et pourtant je tiens compte de l'arrondissement a chaque lignes en 4 octets (bon c'est du charabia,mais je pense qu'on s'est compris).
 
voila mon algorithme pour calculer le decalage :
 
decalage = 4 - (decalage % 4);
if(decalage > 0) lire....
 
ayudan me, por favor   :cry:


---------------
"l'homme est un loup pour l'homme"
Reply

Marsh Posté le 02-05-2001 à 13:35:36    

je me suis trompé, c'est :
 
if(decalage < 4) lire...


---------------
"l'homme est un loup pour l'homme"
Reply

Marsh Posté le 02-05-2001 à 14:14:36    

y'a quoi dans la variable decalage au debut ?
 
voila ce que j'utilise pour enregistrer :
 

Code :
  1. // -----------------------------------------------------------------------------
  2. // Enregistre une image dans un fichier : format bmp
  3. int Save_BMP_Ex(char* nom_fichier,int largeur,int hauteur,GLubyte* mem) {
  4. // Fichier bmp non compressé 24bits
  5.   FILE*         fichier;
  6.   int           position_tampon=54;
  7.   int           position_image=0;
  8.   int           taille_donnees_fichier=0;
  9.   int           complement=0;
  10.   GLubyte*      tampon=(GLubyte*)NULL;
  11. // initialisation des données
  12.   complement=(largeur*3)%4;
  13.   if (complement>0) {
  14.     complement=4-complement;
  15.     }
  16.   taille_donnees_fichier=54+((largeur*3)+complement)*hauteur;
  17. // création du tampon
  18.   tampon=(GLubyte*)malloc(sizeof(GLubyte)*taille_donnees_fichier);
  19.   if (tampon==(GLubyte*)NULL) {
  20.     return(0);
  21.     }
  22. // remlissage du tampon
  23. // entete
  24.   tampon[ 0]='B';
  25.   tampon[ 1]='M';
  26. // taille du fichier
  27.   tampon[ 2]=taille_donnees_fichier & 255;
  28.   tampon[ 3]=(taille_donnees_fichier >> 8) & 255;
  29.   tampon[ 4]=(taille_donnees_fichier >> 16) & 255;
  30.   tampon[ 5]=(taille_donnees_fichier >> 24) & 255;
  31. // inutilisé
  32.   tampon[ 6]=0;
  33.   tampon[ 7]=0;
  34.   tampon[ 8]=0;
  35.   tampon[ 9]=0;
  36. // adresse des données
  37.   tampon[10]=54;
  38.   tampon[11]=0;
  39.   tampon[12]=0;
  40.   tampon[13]=0;
  41. // taille de l'entete
  42.   tampon[14]=40;
  43.   tampon[15]=0;
  44.   tampon[16]=0;
  45.   tampon[17]=0;
  46. // taille image : largeur et hauteur
  47.   tampon[18]=largeur & 255;
  48.   tampon[19]=(largeur >> 8) & 255;
  49.   tampon[20]=(largeur >> 16) & 255;
  50.   tampon[21]=(largeur >> 24) & 255;
  51.   tampon[22]=hauteur & 255;
  52.   tampon[23]=(hauteur >> 8) & 255;
  53.   tampon[24]=(hauteur >> 16) & 255;
  54.   tampon[25]=(hauteur >> 24) & 255;
  55. // nombre de plan
  56.   tampon[26]=1;
  57.   tampon[27]=0;
  58. // nombre de couleur
  59.   tampon[28]=24; // 24 bits
  60.   tampon[29]=0;
  61. // format de compression (aucune=0)
  62.   tampon[30]=0;
  63.   tampon[31]=0;
  64.   tampon[32]=0;
  65.   tampon[33]=0;
  66. // taille de l'image : ta mère
  67.   tampon[34]=0;
  68.   tampon[35]=0;
  69.   tampon[36]=0;
  70.   tampon[37]=0;
  71. // resolution horizontale : 2834ppm
  72.   tampon[38]=18;
  73.   tampon[39]=11;
  74.   tampon[40]=0;
  75.   tampon[41]=0;
  76. // resolution verticale : 2834ppm
  77.   tampon[42]=18;
  78.   tampon[43]=11;
  79.   tampon[44]=0;
  80.   tampon[45]=0;
  81. // nombre de couleurs utilisées : ?
  82.   tampon[46]=0;
  83.   tampon[47]=0;
  84.   tampon[48]=0;
  85.   tampon[49]=0;
  86. // nombre de couleurs importantes : ?
  87.   tampon[50]=0;
  88.   tampon[51]=0;
  89.   tampon[52]=0;
  90.   tampon[53]=0;
  91. // image
  92.   for (int i=0;i<hauteur;i++) {
  93.     for (int j=0;j<largeur;j++) {
  94.       tampon[position_tampon  ]=mem[position_image+2];
  95.       tampon[position_tampon+1]=mem[position_image+1];
  96.       tampon[position_tampon+2]=mem[position_image  ];
  97.       position_tampon=position_tampon+3;
  98.       position_image=position_image+3;
  99.       }
  100.     position_tampon=position_tampon+complement;
  101.     }
  102. // Ouverture du fichier
  103.   fichier = fopen(nom_fichier,"wb" );
  104.   if (fichier==(FILE*)NULL) {
  105.     free(tampon);
  106.     return(0);
  107.     }
  108. // Ecriture du fichier
  109.   fseek(fichier,0,0);
  110.   if (fwrite(tampon,1,taille_donnees_fichier,fichier)!=taille_donnees_fichier) {
  111.     free(tampon);
  112.     return(0);
  113.     }
  114. // fin
  115.   free(tampon);
  116.   fclose(fichier);
  117.   return(1);
  118. }
  119. //------------------------------------------------------------------------------

Reply

Marsh Posté le 02-05-2001 à 15:34:18    

je me suis encore gouré, decidément :
 
decalage = 4 - (largeur_image % 4);


---------------
"l'homme est un loup pour l'homme"
Reply

Marsh Posté le 02-05-2001 à 16:19:02    

Ton decalage ne me semble pas bon puisque lorsque la largeur est un multiple de 4 il doit valoir 0 et non pas 4.
tu peux ecrire par exemple:
decalage=(4-(largeur_image&3))&3;

Reply

Marsh Posté le 03-05-2001 à 09:34:54    

je vais essayer,
mais & je sais po a quoi ça sert, je maitrise pas l'hexa, mais un jour je m'y mettrais

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed