|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
GRAPHIQUE UTILISANT LE DOUBLE BUFFERING (ENLÉVE L'EFFET DE CLIGNOTEMENT)
Information sur la source
Description
Beaucoup se demande pourquoi l'image clignote dès que l'on surcharge un peu trop un graphique, et surtout comment éviter cela. Eh bien cette source montre comment résoudre ce problème en utilisant le "Double buffering", grâce à la classe .NET "BufferedGraphics" Cette source redonne de l'espoir à tous ceux qui croyaient (à tords) que le GDI++ était une librairie mal étudiée et lente par-dessus tout. Pour illustrer le problème de la lenteur j'ai décidé d'ajouter des formes de toutes les couleurs s'agitant dans un panel, le nombre de fps souhaités est réglable et le nombre de formes dessinées à l'écran s'adaptent automatiquement, j’atteins pour ma part ~40-50 FPS avec 100 formes dessinées. J'ai choisi de commenter mon code au maximum pour qu'il soit accessible à tous.
Source
- Public Class Form1
-
- ''' C'est le graphique avec lequelle on va dessiner dans un premier temps, puis afficher
- Private BufferredGraphic As BufferedGraphics
-
- ''' C'est l'objet qui permet d'allouer de la mémoire tampon pour stockage du bitmap de dessin
- Private CurrentContext As BufferedGraphicsContext
-
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
-
- 'On alloue la mémoire tampon de dessin
- BufferredGraphic = Me.CurrentContext.Allocate(Me.CreateGraphics(), Me.DisplayRectangle)
-
- End Sub
-
- Private Sub Dessin()
-
- 'On dessine dans la mémoire
- BufferredGraphic.Graphics.Clear(Color.White)
-
- 'Déclenche l'évenement OnPaint de la fenêtre
- Me.Form1_Paint(Me, New PaintEventArgs(Me.BufferredGraphic.Graphics, Me.Form1.DisplayRectangle))
-
- End Sub
-
- Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Form1.Paint
-
- 'Affiche enfin à l'écran le graphique contenue dans la mémoire, de manière persistante
- BufferredGraphic.Render()
-
- End Sub
-
- End Class
Public Class Form1
''' C'est le graphique avec lequelle on va dessiner dans un premier temps, puis afficher
Private BufferredGraphic As BufferedGraphics
''' C'est l'objet qui permet d'allouer de la mémoire tampon pour stockage du bitmap de dessin
Private CurrentContext As BufferedGraphicsContext
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'On alloue la mémoire tampon de dessin
BufferredGraphic = Me.CurrentContext.Allocate(Me.CreateGraphics(), Me.DisplayRectangle)
End Sub
Private Sub Dessin()
'On dessine dans la mémoire
BufferredGraphic.Graphics.Clear(Color.White)
'Déclenche l'évenement OnPaint de la fenêtre
Me.Form1_Paint(Me, New PaintEventArgs(Me.BufferredGraphic.Graphics, Me.Form1.DisplayRectangle))
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Form1.Paint
'Affiche enfin à l'écran le graphique contenue dans la mémoire, de manière persistante
BufferredGraphic.Render()
End Sub
End Class
Historique
- 10 octobre 2007 15:54:07 :
- petite faute d'ortographe ^^
il y en a suremement plein d'autres
je m'en excuse.
- 11 octobre 2007 16:17:49 :
- - Suite à un commentaire, le graphique est maintenant dessiné dans l'événement OnPaint.
- Encore des fautes d'orthographes ;)
- 11 octobre 2007 16:19:33 :
- Suite à un commentaire, le dessin de graphique se fait maintenant dans l'événement OnPaint.
- 11 octobre 2007 18:32:22 :
- Mise a jour de la source exemple.
- 02 avril 2008 23:09:12 :
- Suite aux commentaires :
- Utilisation de la classe BufferedGrahics (Gain de 10fps)
et quelques autres améliorations :
- Optimisation du nombre de formes dessinées a l'écran en fontion des FPS.
- Ajout d'un icône
- Utilisation de la compliation conditionnelle pour choisir le mode de fonctionement
A venir :
- Adaptation en écran de veille (complet, avec aperçu)
- Amélioration de la fonction de dégradé
- 03 avril 2008 18:22:04 :
- Ajout d'une classe dégrader,
qui permet de mieu gérer les couleurs, et de créer ses propres dégradés.
cette classe est Serializable pour pouvoir sauvergarder et charger les dégradés créés
- 03 avril 2008 18:24:59 :
- Ajout d'une classe dégrader, qui permet de mieu gérer les couleurs, et de créer ses propres dégradés. cette classe est Serializable pour pouvoir sauvergarder et charger les dégradés créés
- 03 avril 2008 18:30:33 :
- Correction d'une erreur
- 03 avril 2008 18:33:09 :
- Mise a jour de la capture.... lol
- 03 avril 2008 19:34:37 :
- Re modification de la capture, je m'y prend comme un pied...
- 07 avril 2008 20:26:54 :
- Suite à un commentaire:
- Lissage des FPS (avec moyenne glissante)
Et:
- Suppression de la compilation conditionelle car inadapté
- Optimisation du chargement des dégradés (passage en Shared)
- Lorsque on appuis sur la touche espace les informations sur les formes s'affichent
- 08 avril 2008 15:36:10 :
- Optimisation dans l'affichage des couleurs.
La palette n'est calculée qu'une seul fois pour toutes les formes.
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Sorties graphiques un un picture [ par paskal ]
'Jour m'sieurs et dams...Une petite question très bête : Sur une feuille, j'ai une 'image' placée dans un 'frame'....L'action d'un bouton également su
Comment enregistrer une forme en une image de type graphique (bmp,jpg...) ? [ par muzza ]
Question dans le sujet merci
Graphique [ par simofid ]
Je me demande comment changer la taille d'une image, ex:Nous avons une image (foto.jpg) de taille 800x600 et nous voulons transformer sa taille et la
Image et graphique [ par ERICVB7 ]
Bonjour,Je programme en VB.NET (sous XP) et je cherche un code source me permettant de remplir une zone de couleur uniforme dans une image (type bitma
Comment enregistrer une form en une image de type graphique (bmp,jpg...) ? [ par sbouquet ]
Ben voila la question est dans le sujet, j'ai vu qu'elle avait deja était posée de la meme facon mais personne n'avait repondu et comme j'ai le meme p
[GDI / GDI+] Besoin d'aide urgent [ par lcprog ]
Salut tout le monde!Alors si quelqu'un pouvait me sauver la vie, je bloque sur un problème depuis bientot 20h...j'utilise l'api gdi+je voudrai récupér
MSCHART, comment supprimer le clignotement ? [ par denis21 ]
Bonjour à tous, je souhaite faire un graphique à l'aide du composant MSCHART, ce graphique doit etre en temps reel !Et c'est là le probleme, qd j'ai
Exporter un graphique excel [ par Draconagi ]
Voila j'ai un document excel sur lequel il y a plusieurs tableaux et je génére un graphique à partir de ceux la. Le graphique est sur s
Sauver, restaurer image graphique ecran Vb2005 [ par alainvolatile ]
Bonjour à tous, <P class=MsoNormal style="MARGIN: 0cm
Comment exporter un graphique en fichier image ? [ par GetheBeber ]
Bonjour à tous,Malgré bien des efforts, je n'arrive pas à trouver comment exporter un graphique (contrôle MSChart) en fichier imag
|
Téléchargements
Logiciels à télécharger sur le même thème :
|