D_E_R_I_C
Messages postés4Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention 1 mars 2008
-
17 févr. 2008 à 08:57
D_E_R_I_C
Messages postés4Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention 1 mars 2008
-
1 mars 2008 à 22:00
Bonjour,
Je débute en C# et j'essaie de dessiner en WinForm.
Si je fais un MaForm.CreateGraphics(), le dessin que je mets dessus est très volatile ; il suffit que je passe une autre fenêtre en avant plan et je n'est plus rien de ce qui était dessiné et je ne peux plus dessiner dessus.
Si je dessine dans un BMP, je n'aurais le résultat qu'à la fin et pas tout au long du processus de dessin
Bitmap bmp =
new
Bitmap(
this.ClientRectangle.Width,
this.ClientRectangle.Height);g =
Graphics.FromImage(bmp);
//dessiner icipictureBox1.Image = bmp;
Comment faire ? Autre précision, je ne peut pas m'insérer dans un évènement Paint, le redessin serait trop long.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 18 févr. 2008 à 02:10
Salut,
"Autre précision, je ne peut pas m'insérer dans un évènement Paint, le redessin serait trop long."
Bien sûr que non.. à moins de devoir dessiner à plus de 30 frames par secondes, dans ce cas tourne toi vers DirectX ou XNA.
Les dessins GDI+ ne sont pas persistants, tu dois donc redessiner à chaque évènement Paint. Normalement on utilse très peu CreateGraphics, quand tu as besoin de redessiner ta forme, exécute la méthode Invalidate( ) qui elle va déclencher l'évènement Paint.
Et comme le dit Bidou pour améliorer tout ça on utilise un double buffer, soit géré par la forme elle même via la méthode SetStyle soit avec un simple bitmap que tu gardes en mémoire.
D_E_R_I_C
Messages postés4Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention 1 mars 2008 1 mars 2008 à 22:00
Je mets le temps à répondre.
Merci pour vos réponses ; ça m'a bien aidé. En effet, redessiner toute la fenêtre est très rapide. En fait, je crée un bitmap, d'où je tire un graphics pour dessiner dessus. Puis dans l'évènement Paint, je fais un : e.Graphics.DrawImage(_bmp, 0, 0);.