olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
11 juin 2008 à 23:01
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
25 sept. 2008 à 23:22
Bonjour
J'ai developpé une application qui fait pas mal de bricolage graphique sur un picturebox
Ca marche tres bien
J'ai lu quelques articles qui déconseillent fortement l'usage du picturebox pour faire du dessin et preconisent plutot un panel
J'ai essayé de remplacer mon pb par un panel, apres avoir adapte deux trois trucs et surtout remplace les assignation d'images (resultats de certains draw)
pb.image=image;
par des
panel.backroundimage=image
Ca marche de nouveau
Mais je ne vois pas l'avantage, surtout un inconvénient c'est que j'ai un effet de flikkering dans les move / redraw que je n'avais pas du tout sur le pb
Quelqu'un peut-il apporter sa connaissance / expérience sur le sujet ?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 13 juin 2008 à 02:17
Salut, tu utilises le Panel de la même façon que la PictureBox, c'est à dire en assignant l'image au background ( panel.backroundimage=image ou pb.image=image ) ce n'est pas performant ce genre de chose, dérive un simple contrôle et dessine tout dans sa méthode OnPaint et/ou OnPaintBackground, pour les flickers active le bit de DoubleBuffer ( méthode SetStyles ).
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 13 juin 2008 à 16:58
Salut Lutinore
Jusqu'ici le picturebox ne me pose aucun problème apparent
Sauf que j'ai lu des avis déconseillant l'usage de ce control pour faire du draw
Le pannel n'a pas de methode setstyle ni doubble buffer
Su Picturebox je n'emploie pas ca et je n'ai pas de problème de scintillement
Pour ce qui est de l'assignation d'une image j'emploie cela pour creer des fonds fixes moins volatils que les manipulation de l'utilisateur
J'ai donc pratiquement un dessin en deux temps
1- Une assignation d'image dans un certain contexte
2- Un dessin qui peut changer sur cette image
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 22 juin 2008 à 08:54
Le panel n'a pas de méthode setstyle ni doubble buffer
Si, comme tout les contrôles, mais c'est une méthode protégée.
Sur Picturebox je n'emploie pas ca et je n'ai pas de problème de scintillement
La PictureBox utilise apparemment déja un double buffer, et c'est pour ça aussi que je te disais de dériver un simple contrôle, là t'es sûr de tout maitriser dans la phase de dessin.
j'emploie cela pour creer des fonds fixes moins volatils que les manipulation de l'utilisateur
Oui mais ( panel.backroundimage=image ou pb.image=image ) c'est pas comme ça qu'on dessine ! du moins pas quand on veut un code performant. fais tes dessins dans un off screen ( une image non affichée sur l'ecran ) puis dans le OnPaint tu dessines ton image ( DrawImage ); ça revient à faire son propre double buffer.
2- Tu me conseille de faire mes dessin dans un off screen
Mais !! N'est ce pas ce que je fais déja ?? Ce qui est comme tu le dis une sorte de double buffering
Image Zoom = new Bitmap(pb_zoom.Width, pb_zoom.Height);
Graphics graphics = Graphics.FromImage(Zoom);
Ensuite draw sur mon graphics
Ensuite
pb_zoom.Image = Zoom;
Quelle est la différence avec ce que tu conseille ?
Attention ! : ce que je fais la c'est pour construire l'image de fond initiale
Apres j'en convient je fais des draws sur un graphics directement a l'écran
cGraphics = pb_zoom.CreateGraphics();
Vous n’avez pas trouvé la réponse que vous recherchez ?
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 25 sept. 2008 à 23:22
Oui mais ( panel.backroundimage=image ou pb.image=image ) c'est pas comme ça qu'on dessine ! du moins pas quand on veut un code performant. fais tes dessins dans un off screen ( une image non affichée sur l'ecran ) puis dans le OnPaint tu dessines ton image ( DrawImage ); ça revient à faire son propre double buffer.
Bonsoir Lutinore
Je reviens sur ce sujet d'il y a quelques semaines car je n'ai toujours pas bien saisi comment on dessinait sur un pannel j'avoue ne pas avoir vraiment cherché car la methode du PB ne fontionne pas trop mal
Pour le moment
Et je construit des graphics
Soit avec Creategraphics (sur picture box)
Soit avec FromImage()
je fais des drawimage a partir d'images
Des drawlines (ou autre) sur des graphics
A quoi sert le OnPaint dans ce cas ?
Comment afficher sur autre chose qu'un PB ?