GDI : Graphique qui scintille

Résolu
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010 - 26 mai 2007 à 14:22
survcopt Messages postés 224 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 13 mai 2022 - 26 mai 2007 à 17:40
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

survcopt Messages postés 224 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 13 mai 2022 3
26 mai 2007 à 16:48
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
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 mai 2007 à 15:13
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.
0
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010
26 mai 2007 à 17:29
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
0
narfight Messages postés 129 Date d'inscription lundi 17 mars 2003 Statut Membre Dernière intervention 4 mars 2010
26 mai 2007 à 17:35
Merci je viens de tester, c'est parfait :D
0

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

Posez votre question
survcopt Messages postés 224 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 13 mai 2022 3
26 mai 2007 à 17:40
tant mieux

www.survey-copter.com
0
Rejoignez-nous