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 code 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 donne 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 diffrente de 0
pEcran[320*(TheY+u)+TheX+z]=(unsigned char)point;
/* Copie le point courant vers l'cran virtuel ou rel */
}
fclose(TheFile);
}
return 1;
} |
Partager