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 :

Screenshot en C avec SDL2 (ou autre)


Sujet :

SDL

  1. #1
    Candidat au Club
    Homme Profil pro
    For fun
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : For fun
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Screenshot en C avec SDL2 (ou autre)
    Bonjour à tous et à toute!

    Je débute en C.

    Je cherche à réaliser un screenshot en C sous linux.
    Je me suis tourné vers SDL2 mais si vous avez des réponses avec GTK je suis preneuse:

    J'aimerais récupérer tous les pixels de mon écran, créer, une image avec SDL puis la sauvegarder.
    Je souhaite juste quelques éclaircicements, si certain de vous ont déjà utilisé cette librairie cela me serait d'une grande aide!

    Respectueusement,

    Ketel.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Je ne comprends pas ta situation.
    Tu as une appli sous SDL2 et veux avoir une façon/un raccourci pour faire un screenshot du jeu ?
    Ou tu veux faire un truc pour refaire le fonctionnement du bouton imprime écran de ton clavier ?
    Dans le 1er cas c'est très simple, dans le second aucune idée de la faisabilité réelle et dépend très fortement du système.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Candidat au Club
    Homme Profil pro
    For fun
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : For fun
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    1-Je n'ai pas d'appli sous SDL2, je m'oriente sur cette librairie graphique pour mon petit projet.
    2-C'est plutôt refaire le fonctionnement du bouton imprime écran.
    3-J'ai une idée comment faire sous windows avec la WINApi mais je ne sais pas comment faire sous linux.

    J'espère être claire .

    Merci d'avance.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    J'avoue ne pas utiliser cette bibliothèque mais elle est très similaire à celle de Gtk que j'utilise.
    Je viens de regarder un peu la documentation de la SDL. Il faudrait pouvoir récupérer la SDL_Window de la fenêtre root. Malheureusement je n'ai rien trouvé. J'ai peut-être mal cherché.

    Côté Gtk+ tu peux utiliser la fonction GdkWindow *gdk_screen_get_root_window (GdkScreen *screen); et ensuite cairo_surface_t *gdk_offscreen_window_get_surface (GdkWindow *window);. Je ne promets pas que la surface hors écran correspond a ce qui est affiché. Il faudra tester.

    Si cela fonctionne, avec un cairo_surface* tu peux la sauver dans le format graphique de ton choix.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Il faudrait pouvoir récupérer la SDL_Window de la fenêtre root.
    Normalement, c'est au programme et au programmeur de garder une référence vers cette instance. Du coup, le programme(eur) a bien cette instance et peut l'utiliser pour récupérer la SDL_Surface avec SDL_GetWindowSurface(). De là, il devrait y avoir moyen de récupérer les pixels.

    Attention, je me méfierai des cas où la SDL utilise le GPU pour faire le rendu.
    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.

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Ketel-One Voir le message
    Je cherche à réaliser un screenshot en C sous linux.
    il suffit d'appeler tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int SDL_SaveBMP(SDL_Surface* surface, const char*  file)
    Pour quelque chose de plus sophistiqué , il faut faire une copie de la mémoire vidéo/écran à un instant t , sauvegarder les écrans dans un thread et les sauvegarder

  7. #7
    Candidat au Club
    Homme Profil pro
    For fun
    Inscrit en
    Mars 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : For fun
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous et à toutes.

    Je vous remercie de vos réponses rapides. C'est parfait.

    Respectueusement,

    Ketel.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Si je comprends ton but est de faire un screenshot de l'appli et non du bureau système.
    Avec SDL2, il faut faire un rendu dans une texture puis tu peux extraire les pixels de la texture dans une surface et enregistrer ta surface.

    Tu as un exemple de ce processus ici : https://stackoverflow.com/a/51238719
    Il faut avoir initialiser le renderer avec SDL_RENDERER_TARGETTEXTURE et la texture cible avec SDL_TEXTUREACCESS_TARGET.
    Si ton renderer ne change pas, tu peux sauvegarder sa taille, format etc au début puis directement utiliser SDL_RenderReadPixels
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. [AJAX] Liste avec si select "autre" ouvre un div pour ajouter option
    Par gandalf76fr dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/11/2006, 15h24
  2. Lancer un raccourci.lnk avec Start ou autre
    Par Lorponos dans le forum Windows
    Réponses: 4
    Dernier message: 24/07/2006, 21h20
  3. Réponses: 1
    Dernier message: 11/07/2006, 22h47
  4. Hebergement de données: avec Citrix ou autre?
    Par ronando dans le forum Windows
    Réponses: 2
    Dernier message: 10/10/2005, 10h31
  5. update avec condition sur autre table
    Par allowen dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/04/2005, 15h02

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