[VB.NET] Utilisation de Graphics

Signaler
Messages postés
95
Date d'inscription
lundi 11 juin 2007
Statut
Membre
Dernière intervention
9 mai 2013
-
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
-
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.

Merci par avance.


julien**

2 réponses

Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
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



Bonne Prog
Messages postés
95
Date d'inscription
lundi 11 juin 2007
Statut
Membre
Dernière intervention
9 mai 2013

Bonjour. Je viens de trouver une solution à mon problème.
Mon problème ressemble au problème de ce forum :

Refresh PictureBox Graphics

J'ai fait la solution suivante :

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



Et voilà mon problème est réglé.

Bonne soirée. A bientôt
julien**