Estoy tratando de crear una imagen con un fondo transparente para mostrar en una página web.

He intentado varias técnicas, pero el fondo siempre es negro.

¿Cómo puedo crear una imagen transparente y, a continuación, dibuje algunas líneas sobre él ?

2 Comentarios

  1. 36

    Llamada Graphics.Clear(Color.Transparent), bueno, claro que la imagen. No te olvides de crear con un formato de píxel que tiene un canal alfa, por ejemplo,PixelFormat.Format32bppArgb. Como este:

    var image = new Bitmap(135, 135, PixelFormat.Format32bppArgb);
    using (var g = Graphics.FromImage(image)) {
        g.Clear(Color.Transparent);
        g.DrawLine(Pens.Red, 0, 0, 135, 135);
    }

    Supone que está using System.Drawing y System.Drawing.Imaging.

    Edit: Parece que usted no necesita realmente el Clear(). Sólo la creación de la imagen con un canal alfa crea un espacio en blanco (totalmente transparente) de la imagen.

    • Supongo que me perdí la sobrecarga en el constructor de mapa de bits. Lamentablemente, no tengo el código disponible ahora mismo, voy a probar esta noche…
    • Confía en mí, funciona, lo he probado 😉
    • Hubo un poco más de lo que usted dice, pero me hizo un poco de investigación y tengo que trabajar. Gracias.
    • En realidad no había más? Hice exactamente lo que ves en mi código de ejemplo y que hizo bien con canal alfa.
    • El más no tenía nada que ver con gdi. De hecho, estoy usando esto para representar una imagen a un ASP.Net página. El problema era que me estaba guardando la imagen (en formato png) directamente en la secuencia de respuesta, pero eso no funciona para archivos png, tuve que guardar en una memoria de arroyo primero.
    • En mi caso, también tengo que hacer image.MakeTransparent();.
    • He intentado este código como está… de fondo era tan negra como el as de espadas
    • Yo sólo pega este código en LinqPad y funciona como se anuncia (como siempre que vas a importar los espacios de nombres y establecer el color de fondo del panel resultados para los no-blancos, porque de lo contrario no ver si es transparente, y añadir una imagen de la línea.Dump()). Pruébalo, LinqPad es genial para experimentos sencillos como este. ¿Qué hiciste con la imagen después de la creación, es decir, cómo se dieron cuenta de que se fue el negro?

  2. 0

    Esto podría ayudar(algo que me lanzó junto que establece el fondo de un formulario de Windows a una imagen transparente:

    private void TestBackGround()
        {
            //Create a red and black bitmap to demonstrate transparency.            
            Bitmap tempBMP = new Bitmap(this.Width, this.Height);
            Graphics g = Graphics.FromImage(tempBMP);
            g.FillEllipse(new SolidBrush(Color.Red), 0, 0, tempBMP.Width, tempBMP.Width);
            g.DrawLine(new Pen(Color.Black), 0, 0, tempBMP.Width, tempBMP.Width);
            g.DrawLine(new Pen(Color.Black), tempBMP.Width, 0, 0, tempBMP.Width);
            g.Dispose();
    
    
            //Set the transparancy key attributes,at current it is set to the 
            //color of the pixel in top left corner(0,0)
            ImageAttributes attr = new ImageAttributes();
            attr.SetColorKey(tempBMP.GetPixel(0, 0), tempBMP.GetPixel(0, 0));
    
            //Draw the image to your output using the transparancy key attributes
            Bitmap outputImage = new Bitmap(this.Width,this.Height);
            g = Graphics.FromImage(outputImage);
            Rectangle destRect = new Rectangle(0, 0, tempBMP.Width, tempBMP.Height);
            g.DrawImage(tempBMP, destRect, 0, 0, tempBMP.Width, tempBMP.Height,GraphicsUnit.Pixel, attr);
    
    
            g.Dispose();
            tempBMP.Dispose();
            this.BackgroundImage = outputImage;
    
        }
    • Es demasiado complejidad y es que no es necesario hacer este paso 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here