Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4882 connectés 

 


Dernière réponse
Sujet : recherche un fonction pour enregistrer les bitmap
juldjin je vais essayer,
mais & je sais po a quoi ça sert, je maitrise pas l'hexa, mais un jour je m'y mettrais

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
juldjin je vais essayer,
mais & je sais po a quoi ça sert, je maitrise pas l'hexa, mais un jour je m'y mettrais
gnoof 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;
juldjin je me suis encore gouré, decidément :
 
decalage = 4 - (largeur_image % 4);
darkoli 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. //------------------------------------------------------------------------------

juldjin je me suis trompé, c'est :
 
if(decalage < 4) lire...
juldjin 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:
darkoli ben j'en ai fait une mais je ne l'ai pas ici.
 
Elle enregistre des fichier bmp au format 24bits non compressé uniquement.
juldjin 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...

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)