[débutant] problème de lecture d'image
bonjour à tous,
j'ai la fonction de lecture de bmp suivante :
Code:
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| struct ImageBMP LoadBMP(char *File)
{
unsigned char *Data;
FILE *fichier;
unsigned char Header[0x36];
GLuint DataPos,DataSize;
GLsizei Width,Height;
struct ImageBMP Resultat ;
// Lit le fichier et son header
fichier = fopen(File,"rb");
if (!fichier) {
return Resultat ;
}
if (fread(Header,1,0x36,fichier)!=0x36) EXIT;
if (Header[0]!='B' || Header[1]!='M') EXIT;
if (CTOI(Header[0x1E])!=0) EXIT;
if (CTOI(Header[0x1C])!=24) EXIT;
// Récupère les infos du fichier
DataPos = CTOI(Header[0x0A]);
DataSize = CTOI(Header[0x22]);
// Récupère les infos de l'image
Width = CTOI(Header[0x12]);
Height = CTOI(Header[0x16]);
// Charge l'image
fseek(fichier,DataPos,0);
Data = new unsigned char[DataSize]; // *********** c'est là
//Data = (unsigned char*) malloc((DataSize+1)* sizeof(char)); //remplacement non fructueux
if (!Data) EXIT;
if (fread(Data,1,DataSize,fichier)!=DataSize)
{
delete Data; // *********** et c'est aussi là
//free(Data); // remplacement non fructueux
fclose(fichier);
return Resultat ;
}
fclose(fichier);
// Inverse R et B
unsigned char t;
int x;
for (x=0;x<Width*Height;x++)
{
t=Data[x*3];
Data[x*3]=Data[x*3+2];
Data[x*3+2]=t;
}
// On prépare l'ImageBMP à renvoyer
Resultat.imagebytes = Data ;
Resultat.hauteur = Height ;
Resultat.largeur = Width ;
return Resultat ;
} |
pour info,
Code:
1 2 3 4
| struct ImageBMP{
unsigned char *imagebytes ;
GLsizei hauteur,largeur;
}; |
j'ai déniché ce code sur internet et la compilation ne se passe pas comme il faudrait :
il me dit que "new" et "delete" n'ont pas été déclarés. jusque là, je veux bien.
ne sachant pas trop bien à quoi servent ces deux instructions, j'ai tenté de les remplacer par des instructions acceptées (du moins, qui compilent), mais je ne dois pas avoir eu les bonnes intuitions. (repérées par les **** ) car le résultat est qu'il ne me lit aucune donnée. avouez que c'est pas cool.
pourriez-vous me dire comment corriger ce code pour que la lecture se fasse correctement ?
merci