GDI : Graphique qui scintille

Résolu
Signaler
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010
-
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
-
Bonjours,
Je travail actuellement sur un programme en c# qui affiche dans un graphique ce que renvois une sonde de lumiére par le port rs232. Le probléme est que le graphique sintille orriblement. en effect, l'arret plan du graphique change de couleur par rapport à la valeur (en plus que la courbe) ce qui fait que le graphique n'est presque pas visible car tout le temps en reconstruction. A-t-il moyen de faire en sorte d'afficher le graphique qu'une fois fini ? ne pas voir toutes les opérations qu'il ce fait ?

Je vous donnes mon bout de code qui génére le graphique :

private void dessiner()
        {
            int correction = 0;
            Graphics valeur = Graphics.FromHwnd(Ecran.Handle);
            Ecran.BackColor = Color.FromArgb(beau_v, beau_v, beau_v);
            valeur.FillRectangle(fond, new Rectangle(0, 0, Ecran.Width, Ecran.Height));
            #region Affiche le graphique
            for (int id = 1; id < nbr_point; id++)
            {
                if (datav[id].Y != -1)
                {
                    if (datav[id - 1].Y != -1 || id > 1)
                    {
                        if (datav[id - 1].Y == -1)
                        {
                            correction = -1;
                        }
                        valeur.DrawLine(new Pen(Color.Red, 1), step_X * datav[id - 1 + correction].X, step_Y * (max - datav[id - 1 + correction].Y), step_X * datav[id].X, step_Y * (max - datav[id].Y));
                        correction = 0;
                    }
                }
                else
                {
                            (...)
                }
            }
            #endregion
            #region Affiche niveau d'alert
            (...)
            #endregion
        }


Merci d'avance pour votre aide et désolé si ma source est trop grande

5 réponses

Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
Essaie ça
InitializeComponent();

//double buffering pour eviter le scintillement de l'ecra nlors du rafraichissement
this.SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.DoubleBuffer,
true);

www.survey-copter.com
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut, il faut utiliser un double buffer, le framework propose plusieurs moyens de faire ça.. Le principe c'est de tout dessiner sur un bitmap en mémoire puis d'afficher ce bitmap à l'écran.
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010

c'est plus légé que de passer par une varriable BMP provisoire ? car cette solution provisoire que j'ai trouvé demande trop de ressource CPU
Messages postés
129
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
4 mars 2010

Merci je viens de tester, c'est parfait :D
Messages postés
223
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
3 juin 2019
1
tant mieux

www.survey-copter.com