IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Problème pour trouver comment afficher une image jpg ou png avec SDL3 en langage C


Sujet :

SDL

  1. #1
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 165
    Par défaut Problème pour trouver comment afficher une image jpg ou png avec SDL3 en langage C
    Bonjour
    je cherche depuis plusieurs jours un code simple permettant d'afficher une image autre que BMP avec la SDL3 en langage C.

    Les tutos que je trouve sont soit pour BMP, soit pour le C++, soit font intervenir des tas de fonctions compliquées, et la plupart des tutos sont en anglais.

    je débute en langage C et avec la SDL3, et je viens juste d'apprendre à faire le make d'un affichage de fenetre SDL3, mais je sais pas encore comment je dois faire pour le make de SDL3_image.

    J'ai téléchargé la SDL3 et la SDL3_image, et j'utilise w64DevKit.exe

    Pour le moment j'ai fais un fichier cmakeList.txt de ce genre (je sais pas s'il est bon) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cmake_minimum_required(VERSION 3.10)
    project(SDL3Image)
     
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED True)
     
    find_package(SDL3 REQUIRED)
    find_package(SDL3_image REQUIRED)
     
    target_link_libraries( ${Exemple_C_Background} SDL3::SDL3  SDL3_image::SDL3_image)
     
    add_executable(${Exemple_C_Background} main.cpp)

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 230
    Billets dans le blog
    172
    Par défaut
    Bonjour,

    Le CMakeList.txt à l'air correct. Maintenant, vous devez ajouter un #include <SDL_image.h> dans votre code (ou SDL/SDL_image.h), puis vous pouvez utiliser les fonctions de la SDL_image. La documentation officielle est ici : https://wiki.libsdl.org/SDL3_image/FrontPage
    Globalement, ce qui vous intéresse, c'est IMG_Load qui vous donnera une SDL_Surface .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 610
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 610
    Par défaut
    Citation Envoyé par nouby Voir le message
    J'ai téléchargé la SDL3 et la SDL3_image, et j'utilise w64DevKit.exe
    salut je conseille de commencer par utiliser Visual Studio ou CodeBlocks plutôt quitte à optimiser finalement avec cet outil
    VS et CodeBlocks sont des éditeurs de développement intégrés qui prennent en charge la gestion des fichiers de Makefile

  4. #4
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 165
    Par défaut
    Merci beaucoup pour vos conseils !
    Je galère depuis une semaine pour trouver comment afficher une image JPG avec SDL3,
    J'arrive à afficher une fenetre simple de SDL3 c'est tout.
    Mais quand je veux ajouter l'entête SDL3_image.h le cmake build trouve des erreurs.

    Mon problème vient de comment ajouter la librairie image à mon projet.

    J'ai trafiqué mon makeList dans tous les sens et utilisé w64DevKit de plein de façons, en suivant mal des infos en anglais que je comprenais mal ou n'étaient pas adaptées à mon cas.
    je sais plus quoi faire.

    Merci pour la confirmation de ce makeList, je dois trouver maintenant comment y arriver car meme avec makeList je n'y arrive pas.

    Surtout que je travaille en version portable, alors SDL3 n'est pas installée sur mon PC, j'ai seulement un dossier SDL3 et un dossier SDL3_image.
    Et bien sur un dossier de mon projet.

    Je veux essayer de travailler seulement avec notepad++ car il prend pas de place sur une clef usb alors que j'avais pas trouvé de codeblock portable.
    Donc si je peux faire avec notepad++ tant mieux.

    Dossiers de SDL3 :

    Nom : Dossiers_SDL3.jpg
Affichages : 26
Taille : 4,1 Ko

    Dossiers de SDL3_image :

    Nom : Dossiers_SDL3_image.jpg
Affichages : 24
Taille : 3,2 Ko

    Dossier Outils :
    Nom : merde.jpg
Affichages : 24
Taille : 7,9 Ko

    Mon source C : (Une salade je crois)

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include <iostream>
    #include <SDL.h>
    #include <SDL_image.h>
    //#include <SDL3/SDL_mixer.h>
    //#include <SDL3/SDL_ttf.h>
     
    int main(int argc, char*args[])
    {
     SDL_Init(SDL_INIT_EVERYTHING);
    }
     
     
    int main(int argc, char* argv[]) {
        SDL_Init(SDL_INIT_VIDEO);
     
        SDL_Window* win = SDL_CreateWindow("SDL3 Image",640, 480, 0);
        if (win == nullptr) {
            std::cerr << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
            SDL_Quit();
            return 1;
        }
     
        SDL_Renderer* ren = SDL_CreateRenderer(win, NULL);
        if (ren == nullptr) {
            std::cerr << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
            SDL_DestroyWindow(win);
            SDL_Quit();
            return 1;
        }
     
        SDL_Surface* bmp = SDL_LoadBMP("img/Paysage_01.bmp");
        if (bmp == nullptr) {
            std::cerr << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
            SDL_DestroyRenderer(ren);
            SDL_DestroyWindow(win);
            SDL_Quit();
            return 1;
        }
     
        SDL_Texture* tex = SDL_CreateTextureFromSurface(ren, bmp);
        SDL_DestroySurface(bmp);
     
        if (tex == nullptr) {
            std::cerr << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
            SDL_DestroyRenderer(ren);
            SDL_DestroyWindow(win);
            SDL_Quit();
            return 1;
        }
     
        SDL_Event e;
        bool quit = false;
     
        while (!quit) {
            while (SDL_PollEvent(&e)) {
                if (e.type == SDL_EVENT_QUIT) {
                    quit = true;
                }
            }
     
            SDL_RenderClear(ren);
            SDL_RenderTexture(ren, tex, NULL, NULL);
            SDL_RenderPresent(ren);
        }
     
        SDL_DestroyTexture(tex);
        SDL_DestroyRenderer(ren);
        SDL_DestroyWindow(win);
        SDL_Quit();
     
        return 0;
    }
    Oui je sais que mon code utilise une BMP là mais c'est parce que je savais pas comment afficher une jpg

    La commande cmake me donne ça :

    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
    C:/Prog/Prog_C/Exemple_C_Fenetre/Fenetre_C $ cmake -S . -B ../Fenetre_C_BUILD
    -- Building for: Ninja
    -- The C compiler identification is GNU 16.1.0
    -- The CXX compiler identification is GNU 16.1.0
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: C:/Prog/Prog_C/Outils_C/w64devkit/bin/cc.exe - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: C:/Prog/Prog_C/Outils_C/w64devkit/bin/c++.exe - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    CMake Error at CMakeLists.txt:7 (find_package):
      By not providing "FindSDL3.cmake" in CMAKE_MODULE_PATH this project has
      asked CMake to find a package configuration file provided by "SDL3", but
      CMake did not find one.
    
      Could not find a package configuration file provided by "SDL3" with any of
      the following names:
    
        SDL3.cps
        sdl3.cps
        SDL3Config.cmake
        sdl3-config.cmake
    
      Add the installation prefix of "SDL3" to CMAKE_PREFIX_PATH or set
      "SDL3_DIR" to a directory containing one of the above files.  If "SDL3"
      provides a separate development package or SDK, be sure it has been
      installed.
    
    Mon dossier projet contient deux dossiers :

    - Fenetre_C (contient le code C et les dossiers img, inc (les .h), lib (les dll)
    - Fenetre_C_BUILD (ne contient rien)

    Nom : dossier_projet.jpg
Affichages : 26
Taille : 22,3 Ko

Discussions similaires

  1. Comment afficher une image en assembleur ?
    Par byte dans le forum Assembleur
    Réponses: 26
    Dernier message: 03/03/2005, 13h25
  2. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  3. PL/SQL - Comment afficher une image avec HTP ?
    Par patmaba dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/07/2004, 09h28
  4. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51
  5. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo