Probleme chargement d'image

Résolu/Fermé
patedecampagne1 - 10 oct. 2021 à 18:03
 Merci - 13 oct. 2021 à 23:46
Bonjour
Je poste de sujet pour vous exposer un probleme que j'ai rencontrer lors s'une séance de programmation C
J'utiliser la bibliotheque SDL2_image
fonction.c
SDL_Texture *SDL_LoadTexture(App app, char *filename)
{
if (filename == NULL)
{
SDL_CleanApp(app);
SDL_ExitWithError("Veuillez entrer un nom de fichier valide");
}
SDL_Texture *texture;
texture = IMG_LoadTexture(app->renderer, filename);
return texture;
}


main.c
Application application;
PlayerElement player_element;

App app;
Player player;

app = NULL;
player = NULL;

app = &application;
if (app == NULL)
SDL_ExitWithError("impossible de generer l'application");
printf("La generation de l'application est une reussite !\n");
player = &player_element;
if (player == NULL)
SDL_ExitWithError("impossible de generer le player");
printf("La generation du player est une reussite !\n");
/*-----------------------------------------------------------------------*/
player_element.x = SDL_PLAYER_SPAWNPOINT_X;
player_element.y = SDL_PLAYER_SPAWNPOINT_Y;
player_element.texture = SDL_LoadTexture(app, "player.png");
/*-----------------------------------------------------------------------*/


Lorsque que je lance mon programme dans la console celui ci afficher :
console :
La generation de l'application est une reussite !
La generation du player est une reussite

commande de lancement du programme :
>> gcc src/*.c -o bin/prog -I include -L lib -lmingw32 -lSDL2main -lSDL2_image -lSDL2

J'ai put constater que le probleme venait expressement de la fonction IMG_LoadTexture en faisant diffrerent test.

Merci d'avance pour votre aide bonne journée



Configuration: Windows / Chrome 94.0.4606.71

3 réponses

[Dal] Messages postés 6014 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 16 novembre 2022 1 032
Modifié le 11 oct. 2021 à 16:53
Salut patedecampagne1,

Tu ne postes pas un exemple de code minimal nous permettant de reproduire ton problème.

Le code que tu postes dans main.c est très parcellaire. Les tests qu'il fait vont systématiquement réussir, car ils consistent à tester que les variables de ton main ont bien une adresse différente de NULL. Tu ne montres pas que tu fasses une initialisation correcte de la SDL ni comment tu tentes d'afficher quelque chose au moyen de la texture que tu es censé avoir chargé, ce qui sont des conditions au succès d'un affichage quelconque.

Ensuite, tu nous donnes le code de ta fonction SDL_LoadTexture(), dans laquelle tu fais un appel à la fonction IMG_LoadTexture() qui est une fonction de la bibliothèque SDL_Image.

Si cette fonction échoue, elle va renvoyer un pointeur NULL et la fonction SDL_GetError() va renvoyer une chaîne de caractères indiquant la cause de l'erreur.

Tu devrais :
  • récupérer la valeur de retour de la fonction
  • tester cette valeur, et si elle est égale à NULL, afficher un message d'erreur et arrêter ton programme


    (...)
    texture = IMG_LoadTexture(app->renderer, filename);
    if (texture == NULL) {
           fprintf(stderr, "Erreur chargement image : %s\n", SDL_GetError());
           exit(EXIT_FAILURE);
    }
    return texture;
}


Dal
0