GDI : Graphique qui scintille [Résolu]

narfight 129 Messages postés lundi 17 mars 2003Date d'inscription 4 mars 2010 Dernière intervention - 26 mai 2007 à 14:22 - Dernière réponse : survcopt 221 Messages postés mardi 27 mai 2003Date d'inscription 12 juillet 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
survcopt 221 Messages postés mardi 27 mai 2003Date d'inscription 12 juillet 2012 Dernière intervention - 26 mai 2007 à 16:48
3
Merci
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

Merci survcopt 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 122 internautes ce mois-ci

Commenter la réponse de survcopt
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 26 mai 2007 à 15:13
0
Merci
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.
Commenter la réponse de Lutinore
narfight 129 Messages postés lundi 17 mars 2003Date d'inscription 4 mars 2010 Dernière intervention - 26 mai 2007 à 17:29
0
Merci
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
Commenter la réponse de narfight
narfight 129 Messages postés lundi 17 mars 2003Date d'inscription 4 mars 2010 Dernière intervention - 26 mai 2007 à 17:35
0
Merci
Merci je viens de tester, c'est parfait :D
Commenter la réponse de narfight
survcopt 221 Messages postés mardi 27 mai 2003Date d'inscription 12 juillet 2012 Dernière intervention - 26 mai 2007 à 17:40
0
Merci
tant mieux

www.survey-copter.com
Commenter la réponse de survcopt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.