Probleme de scintillement

wonesek Messages postés 115 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 13 mai 2006 - 13 sept. 2003 à 23:55
wonesek Messages postés 115 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 13 mai 2006 - 14 sept. 2003 à 13:07
bonsoir!

j'essaie de creer un programme qui simule l'aiguille d'un sismographe (papier qui bouge -> aiguille avec deplacement verticale) le probleme c'est que lorsque je fait bouger le papier, le chargement du quadrillage (du papier donc) se voit et n'est pas fluide.

si vous pouviez jeter un coup d'oeil a ma source:
www.zehiram.net/tmp/test4.zip

je suis sure qu'il y a des manieres beaucoup plus propres d'arriver au meme resultat en consommant bcp moins de ressource memoires et en utilisant des outils approprié.

merci!

7 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 sept. 2003 à 00:35
J'ai pas regardé ta source, mais je présume que ton cadrillage est fait par des contrôles Line, non ? (j'ai le même problème avec l'un de mes prog).

La solution ? Tracer directement des lignes (soit par la fonction Line, soit par la fonction API LineTo)

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
wonesek Messages postés 115 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 13 mai 2006
14 sept. 2003 à 01:15
Oui j'utilise la methode line de picturebox, je cherchais un nom d'API qui pourrait accelerer la chose, merci DARKSIDIOUS!
0
wonesek Messages postés 115 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 13 mai 2006
14 sept. 2003 à 01:58
J'ai modifier le code pour utiliser lineto et movetoex le probleme n'est toujours pas resolu :'(

j'ai l'impression que le probleme de scintillement ne vient pas de la....

la nouvelle source est ici:
http://www.zehiram.net/tmp/test5.zip
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
14 sept. 2003 à 07:07
Voici le code du tracé légérement modifié, et cela provoque un peu moins de scintinllement, mais il y en a toujours un peu :( :

Dim oldC As POINTAPI

    For i = 0 To 14

    Select Case LLine(i).Dir
    
        Case vertical
        
            Picture1.ForeColor = vbBlack
            
            res1 = MoveToEx(Picture1.hdc, LLine(i).Pos, Picture1.Height, oldC)
            res2 = LineTo(Picture1.hdc, LLine(i).Pos, 0)
            
            LLine(i).Pos = LLine(i).Pos - HSpeed
            If LLine(i).Pos < HSpeed Then LLine(i).Pos = Picture1.Width
    
            Picture1.ForeColor = vbWhite
            
            res1 = MoveToEx(Picture1.hdc, LLine(i).Pos, Picture1.Height, oldC)
            res2 = LineTo(Picture1.hdc, LLine(i).Pos, 0)
        
        Case Else

            Picture1.ForeColor = vbBlack
            
            res1 = MoveToEx(Picture1.hdc, Picture1.Width, LLine(i).Pos, oldC)
            res2 = LineTo(Picture1.hdc, 0, LLine(i).Pos)
            
            LLine(i).Pos = LLine(i).Pos - VSpeed
            If LLine(i).Pos < VSpeed Then LLine(i).Pos = Picture1.Height
            
            Picture1.ForeColor = vbWhite
            
            res1 = MoveToEx(Picture1.hdc, Picture1.Width, LLine(i).Pos, oldC)
            res2 = LineTo(Picture1.hdc, 0, LLine(i).Pos)
        
    End Select
    
    DoEvents

    Next


Remarques :
Chez moi, le scintillement n'est pas trop gênant mais il faut dire aussi que j'ai un athlon XP 2500 +...
En baissant l'interval du Timer, tu obtiens un scintillement moindre !
J'ai modifié le ScaleMode de ta feuille et de ton PictureBox en Pixels !
Plus le PictureBox est grand, et plus le scintillement est perceptible !
Programmer une application de graphisme en VB n'est pas forcément le mieux, il vaudrait mieux le C++, c'est plus rapide...

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MoiOlivier Messages postés 172 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 4 août 2005
14 sept. 2003 à 10:24
Salut,
Une autre solution possible pour éviter le scintillement serait peut-être de dessiner d'abord ton quadrillage dans un picturebox invisible puis de copier l'image de ce picture box dans le premier (celui qui est visible), ainsi, toutes les lignes apparaitraient d'un coup et on ne les verrait pas s'effacer puis se redessiner ailleur. (dans ce cas, pense à mettre les propriétés autoredraw à True)

Bonne prog.
A+
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 sept. 2003 à 11:12
La solution sans aucun scintillement est le double buufering qu'on implemente en creant un bimap original sans ligne sur un hdc en memoire.
Quand besoin de retraçage:
SelectObjetc(hdcmem, bmpmem);
Tracer lignes sur hdcmem;
BitBlt de hdcmem sur hdcdest;
DARKSIDIOUS, vois si tu peux traduire cela en vb, tu trouveras code complet dans mes sources sur cppfrance, trace de sinusoide, ecriture verticale deroulante et autres.
La vitesse sera suffisante en vb ? je ne saurais dire.
BruNews, ciao...
0
wonesek Messages postés 115 Date d'inscription samedi 2 février 2002 Statut Membre Dernière intervention 13 mai 2006
14 sept. 2003 à 13:07
Darksidious j'utilise ton code maintenant. Je vais essayer d'appliquer l'idée de MoiOlivier en attendant que tu transcrive les codes de BruNews lol.

Merci tout le monde ;)
0
Rejoignez-nous