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

GTK+ avec C & C++ Discussion :

Affichage temps-réel d'une séquence d'image


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 36
    Points
    36
    Par défaut Affichage temps-réel d'une séquence d'image
    Bonjour,

    je suis en train de réaliser une interface GTK+ pour visualiser en temps-réel un traitement sur une séquence d'image. Le traitement est effectué dans une boucle dans un GThread, afin de garder la main sur l'interface en même temps. Je désire donc pouvoir afficher chaque image traitée 1 et 1 seule fois dans un GtkDrawingArea. Là se pose deux problèmes :

    Afficher 1 seule fois chaque image :
    Si je place un gtk_widget_queue_draw à la fin de chaque traitement dans le thread, il arrive qu'au bout d'un moment le GtkDrawingArea ne soit plus mis à jour (bloqué sur une image, alors que le traitement continue derrière), à moins de le "forcer" en le redimensionnant.
    J'y ai remédié en appelant gtk_widget_queue_draw depuis une fonction idle, mais du coup il y a énormément de rafraichissements inutiles.

    Afficher toutes les images :
    Parfois le traitement est tellement rapide que le temps d'afficher une seule image, il y en a plusieurs qui ont été traitées et ne seront donc jamais affichées.
    J'ai essayé de placer des G_LOCK / G_UNLOCK aux niveaux du traitement et de l'affichage, dans le but de ne pas effectuer un nouveau traitement tant que l'affichage du résultat précédent n'ait été achevé. En réalité je me retrouve avec une image sur 50 qui s'affiche... Peut-être les G_LOCK ne fonctionnent-ils que dans les GThreads et pas dans les signaux.
    J'aimerais savoir s'il existe un moyen de vérifier que l'affichage est terminé, un peu à la manière d'un g_thread_join qui permet d'attendre la fin de l'exécution d'un thread, avant de poursuivre le traitement.

    Merci,
    BVertut

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Ton premier problème est typique de ce qui se passe quand on mélange des appels à des fonctions gtk dans plusieurs threads et que le locking est mauvais, cf http://developer.gnome.org/doc/API/2...k-Threads.html pour des explications sur comment ça marche. Ton 2nd problème est peut être lié, je suis pas certain.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Effectivement ! Je n'avais lu que la doc sur les threads de la GLib, et non celle de GDK qui contient des informations précieuses !
    Le premier point est donc résolu en supprimant la fonction idle et en remettant l'appel à
    gtk_widget_queue_draw dans mon thread de traitement, mais cette fois-ci protégé par les fonctions adéquates !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    gdk_threads_enter();
    gtk_widget_queue_draw(winMain);
    gdk_threads_leave();
    J'ai l'impression en outre de ne même plus avoir de problème d'image ne s'affichant pas. Sinon j'ai vu dans la doc un moyen de traiter les événements avant de poursuivre le traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while (gtk_events_pending ())
      gtk_main_iteration ();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affichage en temps réel sur une page web
    Par time_w dans le forum Débuter
    Réponses: 2
    Dernier message: 26/08/2011, 14h52
  2. Lecture et affichage d'une séquence d'images
    Par Nates dans le forum OpenCV
    Réponses: 14
    Dernier message: 18/05/2011, 14h11
  3. Affichage de l'heure en temps réel dans une interface
    Par T-MAT dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 26/12/2008, 19h08
  4. Réponses: 19
    Dernier message: 20/12/2005, 10h03
  5. [VB.NET] Gestion en temps réel d'une bdd access
    Par qwiskas dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/02/2005, 19h37

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