J'ai essayé de lire un sprite de format bmp et j'ai vu qu'il étati déformé. Après un certain temps on m'a averti qu'il fallait que la taille soit un multiple de 4 (sur le web il est dit 4 ou 8 parfois mais avec 4 ca marche).
Effectivement, le code ci dessous ne marche que si la taille est un multiple de 4, mais j'aimerais comprendre pourquoi ...quelqu'un peut il m'expliquer ?
Merci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
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
 
int LireSpriteBmp(unsigned char *fichier, unsigned TheX, unsigned TheY)
{
  unsigned char pal[256][3];
  unsigned char point;
  unsigned i,u,z,avance=64000;
  unsigned char ch;
  unsigned long int Taille; /*taille de l'image(de la zone data)*/
  unsigned long int Debut,AdPalette; /*Debut de la zone data et adresse de la palette*/
  int ch1=30;
  int ch2=43;
  FILE *TheFile;
 
  TheFile=fopen(fichier,"rb"); /*ouverture en lecture binaire*/
  if(!TheFile) exit(-1);
 
  if(fgetc(TheFile)=='B'&&fgetc(TheFile)=='M')  /*vérifie qu'il s'agit d'un fichier bmp*/
  {
    fseek(TheFile,10,0);
    fread(&Debut,sizeof(long int),1,TheFile);  /*lit l'adresse de la zone data*/
    AdPalette=Debut-1024; /*car la palette est cod‚e sur 1024 octets*/
    LirePal(TheFile,AdPalette); /*charge la palette de l'image*/
    fseek(TheFile,34,0);
    fread(&Taille,sizeof(long int),1,TheFile);
    printf("%u", Debut);
    fseek(TheFile,Debut,0); /*se positionne sur la zone de donn‚e de l'image*/
    for(u=ch2;u>0;u--) // boucle sur le nombre de lignes
       for(z=0;z<=ch1-1;z++) // boucle sur le nombre de points sur une ligne
       {
	  /*Effet transparence*/
	  point=fgetc(TheFile);
	  //if(point!=0) // Si la couleur est diff‚rente de 0
	    pEcran[320*(TheY+u)+TheX+z]=(unsigned char)point;
	    /* Copie le point courant vers l'‚cran virtuel ou r‚el */
       }
       fclose(TheFile);
  }
  return 1;
}