OVH Cloud OVH Cloud

Afficher des images

2 réponses
Avatar
Mathieu Chavoutier
Bonjour.

Je cherche à afficher des images. Le problème n'est pas d'afficher une seule
image, mais d'en afficher plein : ça clignotte. Je voudrais bien faire du
doublebuffering, mais je ne vois pas trop comment faire.

Donc, que faire ?

Autre question, je devrais afficher des traits (des droites, comme sous
paint), mais je ne sais pas du tout comment faire. Une idée ?

Voici le code pour l'affichage des images :

private void refreshList()

{

System.Collections.IEnumerator enumerator = currentList.GetEnumerator();

while (enumerator.MoveNext())

if (((State)(enumerator.Current)).isSquare())

drawPanel.Invalidate(new Rectangle(((State)(enumerator.Current)).getEndX(),
((State)(enumerator.Current)).getEndY(),
(int)(((State)(enumerator.Current)).getSize() * zoom),
(int)(((State)(enumerator.Current)).getSize() * zoom)));

}

}

private void repaint(object sender, System.Windows.Forms.PaintEventArgs e)

{

ElementInformation myElementInformation;

System.Collections.IEnumerator enumerator = currentList.GetEnumerator();

while (enumerator.MoveNext())

if ((myElementInformation =
((Graphic.ElementPart)drawPanel.Tag).getCurrentElementInformation()) !=
null)

e.Graphics.DrawImage(newImage, new Rectangle(x, y, (int)(size * scale),
(int)(size * scale)), 0, 0, size, size, GraphicsUnit.Pixel, imageAttr);

}

2 réponses

Avatar
Mitsuru FURUTA [Ms]
Bonjour,

Il faut d'abord créer un buffer aux dimensions de ton affichage:

Bitmap buffer = new Bitmap(width, height);

Ensuite il faut utiliser la méthode static Graphics.FromImage(bitmap);

Qui renvoit un objet graphique qui a comme contexte le buffer.
Du coup c'est cet objet que tu utilises pour faire des affichages dans ta
boucle et rien ne s'affiche car tout est dans le buffer.

Ensuite, tu affiches une unique fois le buffer avec le Draw du véritable
objet graphique.

Pour tracer des lignes ? DrawLine() ?

Bonne continuation,

Mitsuru FURUTA
[Microsoft FRANCE]

"Mathieu Chavoutier" wrote in message
news:
Bonjour.

Je cherche à afficher des images. Le problème n'est pas d'afficher une


seule
image, mais d'en afficher plein : ça clignotte. Je voudrais bien faire du
doublebuffering, mais je ne vois pas trop comment faire.

Donc, que faire ?

Autre question, je devrais afficher des traits (des droites, comme sous
paint), mais je ne sais pas du tout comment faire. Une idée ?

Voici le code pour l'affichage des images :

private void refreshList()

{

System.Collections.IEnumerator enumerator = currentList.GetEnumerator();

while (enumerator.MoveNext())

if (((State)(enumerator.Current)).isSquare())

drawPanel.Invalidate(new


Rectangle(((State)(enumerator.Current)).getEndX(),
((State)(enumerator.Current)).getEndY(),
(int)(((State)(enumerator.Current)).getSize() * zoom),
(int)(((State)(enumerator.Current)).getSize() * zoom)));

}

}

private void repaint(object sender, System.Windows.Forms.PaintEventArgs e)

{

ElementInformation myElementInformation;

System.Collections.IEnumerator enumerator = currentList.GetEnumerator();

while (enumerator.MoveNext())

if ((myElementInformation > ((Graphic.ElementPart)drawPanel.Tag).getCurrentElementInformation()) ! > null)

e.Graphics.DrawImage(newImage, new Rectangle(x, y, (int)(size * scale),
(int)(size * scale)), 0, 0, size, size, GraphicsUnit.Pixel, imageAttr);

}




Avatar
Mathieu Chavoutier
"Mitsuru FURUTA [Ms]" a écrit dans le message de
news:%2314g$
Bonjour,

Il faut d'abord créer un buffer aux dimensions de ton affichage:

Bitmap buffer = new Bitmap(width, height);

Ensuite il faut utiliser la méthode static Graphics.FromImage(bitmap);

Qui renvoit un objet graphique qui a comme contexte le buffer.
Du coup c'est cet objet que tu utilises pour faire des affichages dans ta
boucle et rien ne s'affiche car tout est dans le buffer.

Ensuite, tu affiches une unique fois le buffer avec le Draw du véritable
objet graphique.



Je viens de comprendre comment ça marchait (grâce à tes explications),
merci.

Pour tracer des lignes ? DrawLine() ?



Merci :o)