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

  FORUM HardWare.fr
  Programmation
  C++

  Pb de header avec du bitmap 24 bits

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb de header avec du bitmap 24 bits

n°188289
philbarney
Posté le 01-08-2002 à 22:36:22  profilanswer
 

J'ai fait le programme suivant : je veux sauver au format bmp 24 bits le contenu du tableau colors (592*446 pixels - couleurs RGB ) . Le programme ne marche pas: il cree un fichier bmp mais lataille n'est pas bonne, il fait 792516 bytes au lieu de 792150 bytes. Je peux pas le lire.
Si quelqu'un pouvait me dire ou est mon erreur- je pense que c'est au niveua du header que ca chie.
Merci
 
 
typedef struct {
     char id[2];
     long filesize;
     int reserved[2];
     long headersize;
     long infoSize;
     long width;
     long depth;
     short biPlanes;
     short bits;
     long biCompression;
     long biSizeImage;
     long biXPelsPerMeter;
     long biYPelsPerMeter;
     long biClrUsed;
     long biClrImportant;
     } BMPHEAD;
 
 
BMPHEAD bh;
 
memset ((char *)&bh,0,sizeof(BMPHEAD)); /* sets everything to 0 */
memcpy (bh.id,"BM",2);
bh.filesize  =   592*446*3+54 ;
 
bh.headersize  = 54L ;
bh.infoSize  =  0x28L ;
bh.width     = 592 ;
bh.depth     = 446 ;
bh.biPlanes  =  1 ;
bh.bits      = 24 ;
 
FILE *bmpfile = fopen("name.bmp", "wb" );
 
int bytesPerLine = 1776; //3*592
fwrite(&bh, 1, sizeof (bh), bmpfile);
 
int *linebuf;
    linebuf=(int *)calloc(10000,sizeof(*linebuf));
 
for (i=446;i>0;i--)
   { for (int k=0;k<592;k++)
        { linebuf[3*k]=GetBValue(colors[k][i]) ;
          linebuf[3*k+1]=GetGValue(colors[k][i]) ;
          linebuf[3*k+2]=GetRValue(colors[k][i]) ;
        }
    fwrite(linebuf, 1, bytesPerLine, bmpfile);
   }
fclose(bmpfile);
 
 
 
EndPaint(hwnd1,&ps);
}

mood
Publicité
Posté le 01-08-2002 à 22:36:22  profilanswer
 

n°188336
Cherrytree
cn=?
Posté le 01-08-2002 à 23:37:39  profilanswer
 

Rien à voir, désolé pour la fausse joie que tu risques d'avoir. Mais je me devais de féliciter qqn comme toi, pour avoir eu l'audace de prendre ce pseudo. J'suis cassé.

n°188426
Musaran
Cerveaulté
Posté le 02-08-2002 à 01:27:53  profilanswer
 

Copier/coller d'une précédente réponse:
 
Pour des raisons d'efficacité, le compilateur aligne l'adresse des variables sur des multiples de 4, 8 ou + que le compilateur sait mieux gérer.
 
Dans un aggrégat (struct/class), cela se traduit par l'ajout d'octets de remplissage (padding) après des membres non multiples de cet alignement.
Donc le sizeof d'une struct/class est toujours multiple de cet alignement, et les tableaux n'ont pas de problème d'alignement.
 
Pour y remédier, cette solution (non standard):

Code :
  1. #pragma pack( push,1 ) //pas d'alignement
  2. struct Machin{
  3. char UnChar ;
  4. short UnShort ;
  5. };
  6. #pragma pack( pop ) //restaure l'alignement

Léger inconvénient: ces variables non alignées sont moins rapides d'accès.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°189146
DonPichol
\o/ CPMA 43v3r \o/
Posté le 02-08-2002 à 23:49:58  profilanswer
 

hum...
t'oublie une chose -->

Code :
  1. /******************** BitMapFileHeader *********************************/
  2. unsigned char bftype[2];   /* Contient les 2 caractere B et M designant le format bitmap  $00  */
  3. int bfsize;  /* Taille totale du fichier   $02  */
  4. short int bfReserved1;
  5. short int bfReserved2;
  6. int bfoffbits;  /*  Offset des bits du bitmap ds le fichier   $0A  */
  7. /******************** BitMapInfoHeader ********************************/
  8. int bisize;  /* Taille de cette structure en octets    $0E  */
  9. int biwidth;  /* Largueur du bitmap en pixel    $12  */
  10. int biheight;  /* Hauteur du bitmap en pixel    $16  */
  11. short int biPlane;
  12. short int bibitcount;  /* Bits couleurs par pixel (1 en monochrome)   $1C  */
  13. int bicompression;  /* Schema de compactage (0 pour aucun)    $1E  */
  14. int bisizeimage;  /* Taille de l'image en octets    $22  */
  15. int bixpelspermeter;  /* Resolution horizontale en pixels par metre   $26  */
  16. int biypelspermeter;  /* Resolution verticale en pixels par metre   $2A  */
  17. int biclrused;   /* Nombre de couleurs utilisées dans l'image    $2E  */
  18. int biclrimportant;   /* Nombre de couleurs importantes    $32  */

 
 
ca te fait donc un offset de 62 auquel il faut rajouter la pallette RVB


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pb de header avec du bitmap 24 bits

 

Sujets relatifs
[php] mozzilla et Header("WWW-Authenticate")Cannot add header
[php] pb redirection header / arguments RESOLU!!Pb d'affichage de bitmap 16 bits
rediriger avec header("Location:xxx") dans une frame bien specifique ?[PHP] - Redirection sans fuckin' header() ...
PB d'affichage de bitmap[super newbie inside] problème de header
[PHP] header() 
Plus de sujets relatifs à : Pb de header avec du bitmap 24 bits


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR