bonjour à tous,
j'ai la fonction de lecture de bmp suivante :
pour info,
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
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 ; }
j'ai déniché ce code sur internet et la compilation ne se passe pas comme il faudrait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 struct ImageBMP{ unsigned char *imagebytes ; GLsizei hauteur,largeur; };
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
Partager