Probleme à l'exécution avec DevIL
Bonjour,
j'ai un souci en utilisant la libraire DevIL (ou OpenIL) sous C++ pour charger / enregistrer des fichiers images dans / depuis ma classe Image. Le code s'exécute pourtant correctement, un jpeg est lu puis réécrit dans un autre fichier correctement. J'ai pourtant un seg-fault lorsque l'exécution des fonctions de chargement et d'enregistrement est achevée, au moment de rendre la main à la fonction appelante.
Voici le code des fonctions incriminées :
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
Image::Image(const string& fichier, bool p)
{
lireFichier(fichier);
cout << "[Image] yeah !" << endl;
if(p) initZ();
}
int Image::lireFichier(const string& fichier)
{
cout << "Lecture du fichier " << fichier << "... ";
ILuint imageName;
ilGenImages(1, &imageName);
ilBindImage(imageName);
ilLoadImage(str2char(fichier));
largeur = (int)ilGetInteger(IL_IMAGE_WIDTH);
hauteur = (int)ilGetInteger(IL_IMAGE_HEIGHT);
initRGB();
ILubyte *buffer = new ILubyte[largeur*hauteur*3];
ilCopyPixels(0, 0, 0, largeur, hauteur, 1, IL_RGB, IL_UNSIGNED_BYTE, buffer);
int id=0;
for(int i=0 ; i<hauteur ; i++)
for(int j=0 ; j<largeur ; j++)
{
R[j][i] = (unsigned char)buffer[id++];
G[j][i] = (unsigned char)buffer[id++];
B[j][i] = (unsigned char)buffer[id++];
}
delete[] buffer;
ilDeleteImages(1, &imageName);
ILenum err = ilGetError();
if(err != IL_NO_ERROR)
{
cout << "Erreur. [" << iluErrorString(err) << "]" << endl;
return 0;
}
cout << "OK." << endl;
//ecrireFichier("img_test.jpg");
return 1;
}
int Image::ecrireFichier(const string& fichier)
{
cout << "Ecriture du fichier " << fichier << "... ";
ILubyte *buffer = new ILubyte[largeur*hauteur*3];
int id=0;
for(int i=hauteur-1 ; i>=0 ; i--)
for(int j=0 ; j<largeur ; j++)
{
buffer[id++] = (ILubyte)R[j][i];
buffer[id++] = (ILubyte)G[j][i];
buffer[id++] = (ILubyte)B[j][i];
}
ILuint imageName;
ilGenImages(1, &imageName);
ilBindImage(imageName);
ilTexImage(largeur, hauteur, 1, 3, IL_RGB, IL_UNSIGNED_BYTE, buffer);
ilEnable(IL_FILE_OVERWRITE);
ilSaveImage(str2char(fichier));
ilDeleteImages(1, &imageName);
delete[] buffer;
ILenum err = ilGetError();
if(err != IL_NO_ERROR)
{
cout << "Erreur. [" << iluErrorString(err) << "]" << endl;
return 0;
}
cout << "OK." << endl;
return 1;
} |
Et la fonction appelante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| int main (int argc, char **argv)
{
ilInit();
iluInit();
Image *img_test = new Image("photo_jpg.jpg");
cout << "[main] Yeah ! 1" << endl;
//img_test->ecrireFichier("img_test.jpg");
//cout << "[main] Yeah ! 2" << endl;
delete img_test;
system("PAUSE");
return EXIT_SUCCESS;
} |
Le "OK." à la fin des fonctions s'affiche correctement, et ça plante sans avoir écrit le "Yeah" du main.
Je n'ai pas la moindre idée du souci, à l'aide !