Forcer un PictureBox de conserver son image si l'image a été tirée sur l'utilisation du code dans vb.net

StackOverflow https://stackoverflow.com/questions/1529211

  •  20-09-2019
  •  | 
  •  

Question

Mes PictureBoxes parfois claires de tous les dessins quand ils se font de créer l'image, ou parfois à mi-chemin à travers. Appel GC.Collect () avant le tirage commence le laisse dessiner plus avant qu'il efface, mais comment puis-je arrêter de compensation tout à fait?

Ceci est en vb.net

Merci!

Était-ce utile?

La solution

Un moyen facile de persister images tirées en .Net est de faire le dessin sur un objet Bitmap séparé, puis définissez la propriété d'image de PictureBox égale à la Bitmap, comme ceci:

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
    // draw whatever
}
pictureBox1.Image = bmp;

Désolé, c'est C #, mais il devrait illustrer le principe OK.

Une autre façon de persister des images tirées est de faire le dessin dans l'événement Paint du PictureBox, mais cela signifie que votre code de dessin exécutera chaque fois que le contrôle doit se repeindre (ce qui se produit chaque fois qu'une autre forme est déplacée au-dessus de celui-ci, etc. .). La méthode ci-dessus (définissant la propriété image du contrôle) est plus simple à faire.

Autres conseils

Dans le cas ci-dessus, lorsque « bmp » ou « g » objet est hors de portée et de déchets collectés, les changements d'image PictureBox. Je pense que l'image est toujours référence copié. J'ai essayé bmp.clone de copier l'image sur le picturebox mais quand bmp est détruite, l'image picturebox disparaît. Dans mon cas, j'ai un certain nombre de (déterminé lors de l'exécution) de ces images à affecter à la durée d'exécution PictureBoxes créé.

Dim bm As New Bitmap("C:\picture.bmp")
Dim thumb As New Bitmap(42, 30)
Dim g As Graphics = Graphics.FromImage(thumb)

g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bm, New Rectangle(0, 0, 42, 30), New Rectangle(0, 0, bm.Width, _bm.Height), GraphicsUnit.Pixel)
pbxHead.Image = thumb.Clone()

g.Dispose()
bm.Dispose()
thumb.Dispose()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top