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

C++Builder Discussion :

problème de raffraichissement d'un TImage


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Par défaut problème de raffraichissement d'un TImage
    Bonjour à tous,
    J'ai développé une petite application de traitement d'image,et parmi les fonctionnalités (algorithmes) de celle ci,y en a une qui me pose problème.
    Je vais essayé de vous épargner au maximum les détails inutiles de mon problème afin de ne pas vous embrouiller !

    J'ai implémenté une procédure MiseAJour() qui va mettre à jour tous les éléments d'un vecteur de type TPoint (Snake[100] ) .Ensuite cette procédure devra faire appel à une autre procédure AfficherSnake().Cette dernière devra afficher tout les points du vecteur Snake dans un TImage contenant une BMP.
    Voici en gros le corp de la procédure MiseAJour() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void MiseAJour()
    {
    for(i=0;i<100;i++)
    {
    //Mise à jour du vecteur Snake[]
    Snake[i].x=f1(i);
    Snake[i].y=f2(i); //Les fonctions f1 et f2 ne nous importent pas
    }
    //Affichage de tous les points du vecteur Snake dans Image1 (TImage)
    AfficherSnake();
    }
    Et voici le corp de la procédure AfficherSnake() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void AfficherSnake()
    {
     
    for(i=0;i<100;i++)
    {
    Image1->Canvas->Pixels[snake[i].x][snake[i].y]=clRed;
    }
    }
    Les appels :
    Lorsque l'utilisateur clique sur un bouton,la procédure MiseAJour devra s'exécuter 200 fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     
    //Sauvegarder l'image:
    Image2->picture=Image1->picture;
     
    for(j=1;j<200;j++)
    {
    Image1->Picture=Image2->Picture;//afin d'effacer les points de l'itération precédante. 
    MiseAJour();//Mise à jour + affichage des nouveau points.
    }
    }
    Le problème est que je ne vois pas les changements pendant la boucle ( for(j=1;j<200;j++) ).Je vois seulement le résultat final !
    En executant l'instruction :
    toutes les 10 itérations réglerai le problème,mais en provoquant des Scintillement dans l'image ce qui est vraiment pas beau!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     
    //Sauvegarder l'image:
    Image2->picture=Image1->picture;
     
    for(j=1;j<200;j++)
    {
    Image1->Picture=Image2->Picture;//afin d'effacer les points de l'itération precédante. 
    MiseAJour();//Mise à jour + affichage des nouveau points.
    if(j%10==0) {Image1->refresh();}//raffraichissement toutes les 10 itérations
    }
    }
    Quelqu'un aurait une solution pour éviter ces scintillement dus au rafraichissement?

    Je m'excuse de la longueur de ce message en vous assurant que j'ai essayé de le résumer au maximum...En tout cas si vous êtes arrivé jusqu'ici en sa lecture je vous en remercie déja ...

  2. #2
    Membre expérimenté Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Par défaut
    voici le code complet du jeux snake en c++ builder

    Distribué par http://www.developpez.com

    Auteur original : Ozer Senturk

    Fichiers attachés Fichiers attachés

  3. #3
    Membre émérite Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Par défaut

    Hélas ce que j'essaie de réaliser est un algorithme de segmentation d'images qui s'appelle Snake,et cela n a rien à voir avec le jeu

    Merci quand même

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    Je suis en train de codé un diaporama multi écran, et j'ai eu le même problème de mise a jour entre les transitions. Pour le résoudre dans la boucle j'ai rajouter

    Et ça scintille. La méthode miracle pour que ca scintille plus fu de rajouter au constructeur de ma fenêtre qui contient le TImage :

    PS : J'utilise BC6

  5. #5
    Membre émérite Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Par défaut
    Citation Envoyé par Traxsilver Voir le message

    La méthode miracle pour que ca scintille plus fu de rajouter au constructeur de ma fenêtre qui contient le TImage :

    PS : J'utilise BC6
    Je n'ai pas très bien compris
    Est ce une instruction que je dois ajouter?
    Si oui ou ça exactement?(comment accéder au constructeur)

    PS:J'utilise BC6 aussi.

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    tu ajoute cette ligne dans le contructeur genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    __fastcall TDiaporama::TDiaporama(TComponent* Owner, int leleft, int letop, int number,int timing)
            : TForm(Owner)
    {
            this->Left = leleft ;
            this->Top  = letop  ;
            this->Caption = "Diaporama " + IntToStr(number) ;
            this->timinguneannonce = timing ;
            DoubleBuffered = true;
    }
    C'est un constructeur clasique de la classe TDiaporama qui hérite de la classe TForm soit toute les fenetre builder.

    Edit : Si tu ne peut acceder au constructeur ( utilisation non dynamique des fenetre ) tu peut ajouter cette ligne a l'event OnCreate.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/05/2006, 11h11
  2. Probléme de raffraichissement sous formulaire access
    Par roadster62 dans le forum Access
    Réponses: 4
    Dernier message: 27/03/2006, 16h44
  3. Problème de raffraichissement.
    Par kurul1 dans le forum OpenGL
    Réponses: 6
    Dernier message: 06/02/2006, 16h46
  4. Problème de raffraichissement de listes
    Par blondin01 dans le forum Access
    Réponses: 7
    Dernier message: 13/10/2005, 12h31
  5. [awt] Problème de raffraichissement de composant
    Par FakuFaku dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 21/07/2005, 18h32

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