Draw sur Picture Box ou Panel ? [Résolu]

olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 11 juin 2008 à 23:01 - Dernière réponse : olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 13 juin 2008 à 02:17
3
Merci
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 ).

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de Lutinore
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 13 juin 2008 à 16:58
0
Merci
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
Commenter la réponse de olibara
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 22 juin 2008 à 08:54
0
Merci
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.
Commenter la réponse de Lutinore
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 22 juin 2008 à 11:01
0
Merci
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();
Commenter la réponse de olibara
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 25 sept. 2008 à 23:22
0
Merci
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 ?
Commenter la réponse de olibara

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.