juliengj
Messages postés95Date d'inscriptionlundi 11 juin 2007StatutMembreDernière intervention 9 mai 2013
-
18 févr. 2011 à 17:35
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020
-
21 févr. 2011 à 15:17
Bonjour à tous. Ne sachant pas bien ou poster je suis désolé si je me suis tromper d'endroit.
Alors, voilà je travaille en ce moment sur un jeu 2D en réseau en VB.NET et pour gérer mes graphismes j'utilise le code suivant :
'Initialize
'Définit la mémoire tampon pour les dessins des molécules
Buffer.mainContext = New BufferedGraphicsContext
'Définit le tampon pour dessiner
Buffer.myBuffer = Buffer.mainContext.Allocate(Form.pb_plateau.CreateGraphics, New Rectangle(0, 0, Form.Width, Form.Height))
'Définit la qualité de dessin
Buffer.myBuffer.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
'Nettoyage du graphisme
Buffer.myBuffer.Graphics.Clear(Color.White)
'Ajoute l'image a la mémoire tampon
Buffer.myBuffer.Graphics.DrawImage(MonImage), 0, 0)
'Affichage de la mémoire tampon
Buffer.myBuffer.Render()
Le problème, quand je réduis mon formulaire et que je le ré-ouvre l'image de mon PictureBox disparais. Je voudrais savoir pourquoi ma picturebox réagis comme ça.
En fait, j'ai trouvé une solution alternative à mon problème.
Au lieu de lier le "Graphics" à la "PictureBox", je le lie à une "Bitmap" qui sera passée à la "PictureBox" en tant que "PictureBox.Image".
Du coup, plus de soucis de rafraîchissement de "PictureBox".
Voilà un exemple d'utilisation :
'Mémoire tampon pour dessiner l'image
Public mainContext As BufferedGraphicsContext
Public myBuffer As BufferedGraphics
Public MyBitmap As New Bitmap(Me.Width, Me.Height)
Sub New()
' Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
'Définit la mémoire tampon pour les dessins des molécules
mainContext = New BufferedGraphicsContext
'Définit le tampon pour dessiner
myBuffer = mainContext.Allocate(Graphics.FromImage(MyBitmap), New Rectangle(0, 0, Me.Width, Me.Height))
'Définit la qualité de dessin (anti-crénelage par ex..)
myBuffer.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
myBuffer.Graphics.Clear(Color.White)
myBuffer.Graphics.DrawImage(New Bitmap(My.Resources.ImageTest, Me.Width, Me.Height), 0, 0)
myBuffer.Render()
PictureBox1.Image = MyBitmap
End Sub
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020 21 févr. 2011 à 15:17
Bonjour,
Sinon tu met ton code dans une surcharge de la fonction onPaint du contrôle. Comme ça tu récupère l'objet graphic dans les arguments de la sub et tu n'auras plus de soucis de rafraîchissement.
Pour cela, tu créer une nouvelle classe en y ajoutant un héritage de l'objet PictureBox et tu surcharges :
Public Class Class1
Inherits PictureBox
Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(pe)
Dim graph As Graphics = pe.Graphics
End Sub
End Class