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

Delphi Discussion :

Eviter le scintillement lors du rafraîchissement


Sujet :

Delphi

  1. #1
    Membre du Club Avatar de netsabes
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Points : 45
    Points
    45
    Par défaut Eviter le scintillement lors du rafraîchissement
    Bonjour,

    débutant Delphi (version gratuite 6), j'ai fait un petit programme pour visualiser les termes des suites définissant l'ensemble de Mandelbrot (voir le .ZIP joint).

    J'ai placé une image de fond, qui donne grossièrement les contours de l'ensemble, et permet de se déplacer à la souris dedans. A chaque mouvement de la souris, l'ordi calcule les 20000 premiers termes de la suite et affiche les points correspondants.

    Je dois donc effacer l'écran (régénérer la fenêtre) à chaque mouvement de souris, ce qui génère un désagréable scintillement. J'ai bien imaginé mettre en mémoire les 20000 coordonnées de points et les effacer au mouvement suivant, mais je ne suis pas sûr de gagner en fluidité, car il faudra aussi que pour chaque point je lance une méthode getpixel pour remettre le point dans sa couleur d'origine.

    Quelqu'un a-t-il une solution accessible à mon petit niveau (pas d'API, que je ne maîtrise pas) ?

    Merci.

    Netsabes.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Salut,

    Ajoute ceci dans ton FormCreate:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.DoubleBuffered := true;
    sinon j'aurais plutot utilisé un PaintBox dans ton cas, mais bon, ca fonctionne
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre du Club Avatar de netsabes
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    GENIAL !!!!!!!!!



    Mais ça fait quoi au juste, pour que ça marche ???


    En tout cas un grand merci !

    Netsabes.

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    J'ai pas regardé le code en interne,

    mais le principe du double buffer, c'est

    Au lieu, d'effacer ta 1ere image de ton canvas, puis d'afficher la 2eme image apres cet effacement (cause du flickering)

    le programme affiche la 2eme image dans un autre canvas interne non visible, puis plaque ce canvas interne intégralement par dessus la 1ere image du canvas visible -> pas de flickering (ou scintillement).

    Cela prend donc plus de temps (2 copies au lieu d'une), mais on peut souvent se le permettre maintenant
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre régulier Avatar de gregcat
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    tu peux aussi utiliser un Timage, ca fonctionne aussi.



    ca evite de rafraichir toute la form1 mais seulement la zone image et c'est plus rapide.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Oui c'est cela.
    On échange les 2 pointeurs sur buffer (backbuffer et frontbuffer).
    On dessine hors écran puis on affiche.

  7. #7
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Citation Envoyé par gregcat
    tu peux aussi utiliser un Timage, ca fonctionne aussi.



    ca evite de rafraichir toute la form1 mais seulement la zone image et c'est plus rapide.
    oui mais... il écrit sur le Canvas de la form
    (suis conscient que c'est pas super comme méthode )
    Donc c'est un coup de bol que ca marche, seulement parceque son image prend toute la form.
    D'ailleurs, en etirant la form, les points rouges, sortent de l'image et restent...
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  8. #8
    Membre régulier Avatar de gregcat
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 155
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par TicTacToe
    oui mais... il écrit sur le Canvas de la form
    (suis conscient que c'est pas super comme méthode )
    Donc c'est un coup de bol que ca marche, seulement parceque son image prend toute la form.
    D'ailleurs, en etirant la form, les points rouges, sortent de l'image et restent...
    Oui les point rouges restent en dehors parce que c'est l'image qui ecrase le fond du canvas. peut etre qu'en bloquant le format de la form ca eviterait ce genre de désagrément...

  9. #9
    Membre du Club Avatar de netsabes
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Points : 45
    Points
    45
    Par défaut
    On fait comme on peut, pas trop comme on veut ...

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Personellement j'utilise une PaintBox , comment effectuer un backbuffer tout en sachant que je redessine toute les 50 ms avec l'aide d'un Timer ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/11/2013, 09h13
  2. Réponses: 4
    Dernier message: 28/03/2008, 09h54
  3. Réponses: 1
    Dernier message: 03/03/2008, 09h56
  4. Eviter le scintillement lors de manip css avec javascript...
    Par MasterOfChakhaL dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/04/2006, 20h11
  5. Réponses: 2
    Dernier message: 21/06/2004, 15h55

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