es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadiendo texto a una imagen dibujada con GDI+.

Estoy mostrando imágenes usando un temporizador y un PictureBox. En lugar de mostrar una imagen, luego quitarla y cargar otra, las imágenes parecen agregarse una encima de la otra.

A medida que se muestran las imágenes, me gustaría superponer texto en ellas.

Aquí está el código que estoy utilizando para crear imágenes y texto:

Dim fname As String = (En realidad es una matriz de imágenes(jpg) que se muestra con el temporizador)
Dim bm As New Bitmap(fname)
PicBox.Image = bm
findex -= 1 (índice de la matriz de imágenes)
Dim g As Graphics = PicBox.CreateGraphics
g.DrawImage(bm, 300, 10)
g.DrawString("Kishman Tukus", New Font("Arial", 24, FontStyle.Bold), Brushes.Green, 400, 100)
g.ResetTransform()
g.Dispose()

Necesito que las imágenes se muestren en el PictureBox una a la vez usando el temporizador y también necesito superponer texto en las imágenes.

¿Alguien puede ayudarme a evitar que las imágenes se agreguen al PictureBox en lugar de mostrarse una a la vez?
O incluso mejor, ¿no usar en absoluto un PictureBox y simplemente mostrar imágenes con superposición de texto?
En cualquier caso, necesito evitar la pérdida de memoria.
Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar las imágenes una a la vez sin superponerse en el PictureBox, puedes borrar el PictureBox antes de cargar una nueva imagen. Reemplaza la línea PicBox.Image = bm por PicBox.Image = Nothing para borrar el PictureBox antes de establecer la nueva imagen.

    En cuanto a superponer texto en las imágenes, puedes utilizar el mismo código que has proporcionado después de cargar la imagen en el PictureBox. Sin embargo, no es necesario crear un nuevo objeto Graphics cada vez. En su lugar, puedes utilizar el objeto Graphics del PictureBox. Aquí tienes un fragmento de código actualizado:

    Dim fname As String = (Actualmente un array de imágenes (jpg) que se muestra con un temporizador)
    Dim bm As New Bitmap(fname)
    
    PicBox.Image = Nothing ' borra el PictureBox antes de cargar una nueva imagen
    PicBox.Image = bm ' establece la nueva imagen
    
    Dim g As Graphics = Graphics.FromImage(PicBox.Image)
    g.DrawString("Kishman Tukus", New Font("Arial", 24, FontStyle.Bold), Brushes.Green, 400, 100)
    
    PicBox.Invalidate() ' actualiza el PictureBox para mostrar la imagen actualizada
    
    findex -= 1
    g.Dispose()
    

    Para evitar las fugas de memoria, asegúrate de desechar los objetos Bitmap y Graphics después de haber terminado de utilizarlos, como se muestra en el código anterior. Además, si estás cargando muchas imágenes, puede que quieras considerar el uso de una técnica de carga de imágenes eficiente en memoria, como la carga perezosa o el almacenamiento en caché.

Comments are closed.