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.

Agrega una imagen a un PictureBox existente.

He creado un PictureBox en mi programa. He dibujado algunas líneas de fondo en él al iniciar el programa y después de leer los datos de un archivo me gustaría añadir una curva a esta existente.

namespace Programa
{
    public partial class MainForm : Form
    {
        Bitmap SPD_bmp = new Bitmap(PictureBox1.Width, PictureBox1.Height); // gráfica de fondo
        using (Graphics SPDCurve = Graphics.FromImage(SPD_bmp))
        {
            SPDCurve.DrawLine(new Pen(Color.LightGray), 0, 0, 0, 50);
            SPDCurve.DrawLine(new Pen(Color.LightGray), 10, 0, 10, 50);
            //... el resto de líneas

        }

        PictureBox1.Image = SPD_bmp;
    }


    private void button1_Click(object sender, EventArgs e)
    {
        // esta parte lee datos desde un archivo y debería generar una curva
        // a partir de estos datos y añadir esta curva al PictureBox1 existente

        // intentando añadir la curva al PictureBox1 existente:
        Bitmap SPD_bmp = new Bitmap(PictureBox1.Width, PictureBox1.Height);
        using (Graphics SPDCurve = Graphics.FromImage(SPD_bmp))
        {
            // creando y añadiendo la curva al PictureBox1
        }

        PictureBox1.Image = SPD_bmp;
    }
}

Sin embargo, el código en buttonClick1 me borra las líneas de fondo ya existentes.

Estoy haciendo algo mal. ¿Alguna sugerencia?

Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que en el método button1_Click, estás creando un nuevo objeto Bitmap con las mismas dimensiones que el PictureBox y luego dibujando la curva en él. Sin embargo, esto sobrescribe las líneas de fondo existentes que dibujaste en el Bitmap en el constructor de MainForm. En su lugar, deberías crear un objeto Graphics a partir de la imagen existente del PictureBox y dibujar la curva en ese objeto Graphics. Aquí tienes un ejemplo de cómo podrías modificar tu código:

    C#
    private void button1_Click(object sender, EventArgs e)
    {
    // leer datos desde el archivo y generar la curva...
    Graphics g = Graphics.FromImage(PictureBox1.Image);
    // dibujar la curva en la imagen del PictureBox
    // ...
    PictureBox1.Invalidate(); // invalidar el PictureBox para forzar su redibujo
    }

    Con esta modificación, estás obteniendo el objeto Graphics a partir de la imagen existente del PictureBox y dibujando la curva en él en lugar de crear un nuevo objeto Bitmap. Finalmente, estás invalidando el PictureBox para forzar su redibujo con la curva añadida.

Comments are closed.