Je fais un peu de graphique via le System.Drawing et j'ai quelques problèmes.Trois méthodes System.Drawing manifestent un dessin lent ou un flickery: Solutions? ou d'autres options?
Je maintenir des données dans une file d'attente et je suis dessin (graphique) que les données sur trois blocs d'image
cette méthode remplit le bloc d'image défile ensuite à travers le graphe.
afin de ne pas dessiner sur les dessins précédents (et semblant plus en désordre) j'ai trouvé 2 solutions pour dessiner le graphique.
- Appel
plot.Clear(BACKGOUNDCOLOR)
avant que la boucle de tirage [bloc commenté]
bien que cela provoque un scintillement à apparaître à partir du temps qu'il faut pour faire la boucle de dessin réelle.
- appel
plot.DrawLine(channelPen[5], j, 140, j, 0);
juste avant chaque DrawLine [a commenté]
bien que cela provoque le dessin pour commencer ok alors ralentir très rapidement à une exploration comme si une commande d'attente avait été placé avant la commande draw.
Voici le code de référence:
/*plotx.Clear(BACKGOUNDCOLOR)
ploty.Clear(BACKGOUNDCOLOR)
plotz.Clear(BACKGOUNDCOLOR)*/
for (int j = 1; j < 599; j++)
{
if (j > RealTimeBuffer.Count - 1) break;
QueueEntity past = RealTimeBuffer.ElementAt(j - 1);
QueueEntity current = RealTimeBuffer.ElementAt(j);
if (j == 1)
{
//plotx.DrawLine(channelPen[5], 0, 140, 0, 0);
//ploty.DrawLine(channelPen[5], 0, 140, 0, 0);
//plotz.DrawLine(channelPen[5], 0, 140, 0, 0);
}
//plotx.DrawLine(channelPen[5], j, 140, j, 0);
plotx.DrawLine(channelPen[0], j - 1, (((past.accdata.X - 0x7FFF)/256) + 64), j, (((current.accdata.X - 0x7FFF)/256) + 64));
//ploty.DrawLine(channelPen[5], j, 140, j, 0);
ploty.DrawLine(channelPen[1], j - 1, (((past.accdata.Y - 0x7FFF)/256) + 64), j, (((current.accdata.Y - 0x7FFF)/256) + 64));
//plotz.DrawLine(markerPen, j, 140, j, 0);
plotz.DrawLine(channelPen[2], j - 1, (((past.accdata.Z - 0x7FFF)/256) + 94), j, (((current.accdata.Z - 0x7FFF)/256) + 94));
}
est-il des astuces pour éviter ces frais généraux?
Sinon, y aurait-il d'autres/meilleures solutions?
EDIT: Voir [Solution finale] ci-dessous pour le code de la solution
Cela fonctionne un régal, merci –
Cela a fonctionné pour moi 2. Dessiner avec l'objet graphique créé avec 'this.CreateGraphics()' a causé la propriété 'DoubleBuffered' pour ne pas fonctionner .. Ce problème causé ** scintillement ** et la définition de la propriété 'DoubleBuffered' a provoqué l'abandon de BLANK. Mais dessiner avec un objet graphique créé par ** peintures ** 'e.Graphics' a résolu tous ces problèmes! Merci beaucoup Hans! – Anirudha