Draw sur Picture Box ou Panel ?

Résolu
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 11 juin 2008 à 23:01
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 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 ?


Merci beaucoup
A voir également:

5 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
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 ).
3
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
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.
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
22 juin 2008 à 11:01
Salut Lutinore

Merci pour tes réponses

1- Methode double buffer protégée : comment puis-je y acceder ?

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();
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
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 ?
0
Rejoignez-nous