Forzar a un cuadro de imagen para retener su imagen si la imagen se dibuja en el uso de código de vb.net

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

  •  20-09-2019
  •  | 
  •  

Pregunta

Mis PictureBoxes veces claras de todos los dibujos cuando haya terminado de crear la imagen, o, a veces a medio camino. Llamando GC.Collect () antes de que comience dibujo, permite que atraiga a más antes de que se despeja, pero ¿cómo puedo evitar que despejar por completo?

Esto está en vb.net

Gracias!

¿Fue útil?

Solución

Una manera fácil de persistir imágenes dibujadas en .Net es hacer el dibujo a un objeto de mapa de bits por separado, y luego establecer la propiedad de imagen de la PictureBox igual al mapa de bits, como esto:

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

Lo sentimos, este es C #, pero debe ilustrar el principio OK.

Otra forma de persistir imágenes dibujadas es hacer el dibujo en el evento Paint del cuadro de imagen, pero esto significa que su código de dibujo se ejecutará cada vez que el control debe volver a pintar en sí (que se produce cada vez que otra forma se arrastra sobre la parte superior de la misma, etc. .). El método anterior (ajuste inmueble Imagen del control) es más fácil de hacer.

Otros consejos

En el caso anterior, cuando "bmp" o un objeto "g" se sale del ámbito y la basura recogida, la imagen cambia PictureBox. Creo que la imagen está siempre consigna copiada. Probé bmp.clone para copiar la imagen en el cuadro de imagen, pero aún cuando bmp se recoge la basura, la imagen de cuadro de imagen se desvanece. En mi caso, tengo una serie de (determinado en tiempo de ejecución) este tipo de imágenes que se asignará a tiempo de ejecución PictureBoxes creadas.

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top