Bonjour,

Dans mon application je dois dessiner des courbes en "temps réel" (les pts arrive à une fréquence de 50-80Hz)
Au début j'utilisais un objet qui dérivé de Canvas à l'intérieur duquel je dessinais mes courbes avec des Path; le problème est qu'à chaque nouveau point, je redessinais tout le Path, ça laggait et au plus nous avions de courbe au pire c’était.
Ne trouvant pas comment arranger cela, je suis revenu "au bon vieux temps" du PictureBox, donc nouvel objet dérivé de PictureBox et cette fois ci je ne dessine qu'une line entre le dernier pt et le nouveau pt.

Maintenant que le décor est planté, voila plus en détail comment je construit mon dessin:

A chaque nouvelle courbe,je fait appel à la fonction Redraw
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public void ReDraw()
        {            
            DrawEchelle();  // Dessin des axes et des graduations
            DrawAllCourbe();  //Dessin des courbes passées
}
Mon problème est simple: (si seulement la solution l'était aussi)
pourquoi cela ne fonctionne pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void ReDraw()
        {            
            Bitmap bmp = new Bitmap(Width, Height);
            g = Graphics.FromImage(bmp);
 
            DrawEchelle();  // Dessin des axes et des graduations
            DrawAllCourbe();  //Dessin des courbes passées
 
            g.Flush();
            this.Image = bmp;
}
public void DrawEchelle()
        {
        g.DrawLine(pen_echelle, new Point(AxeXX1, AxeXY1), new Point(AxeXX2, AxeXY2));
        g.DrawLine(pen_echelle, new Point(AxeYX1, AxeYY1), new Point(AxeYX2, AxeYY2));
}
 
 private void DrawCourbe(System.Windows.Media.PointCollection pc)
        {
            g.DrawLines(pen_Courbe, pc);
}
alors que cela fonctionne ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public void ReDraw()
        {  
            DrawEchelle();  // Dessin des axes et des graduations
            DrawAllCourbe();  //Dessin des courbes passées
}
 
public void DrawEchelle()
        {
        g = Graphics.FromImage(this.Image);
 
        g.DrawLine(pen_echelle, new Point(AxeXX1, AxeXY1), new Point(AxeXX2, AxeXY2));
        g.DrawLine(pen_echelle, new Point(AxeYX1, AxeYY1), new Point(AxeYX2, AxeYY2));
 
            g.Flush();
            g.Dispose();
}
 
 private void DrawCourbe(System.Windows.Media.PointCollection pc)
        {
            g = Graphics.FromImage(this.Image);
 
            g.DrawLines(pen_Courbe, pc);
 
            g.Flush();
            g.Dispose();
}
Sachant qu’apparemment je consomme beaucoup trop de temps avec methode2 (et donc m'éloigne du principe de "temps réel") :S
Qu'est ce que je manque dans l'utilisation d'un seul graphics et de dessin dans plusieurs fonction?

Merci d'avance de votre aide. Si je n'ai pas été claire n'hésitez pas à demander des explications.