Créer une image avec un fond transparent en utilisant GDI+?

j'essaie de créer une image avec un fond transparent à afficher sur une page web.

J'ai essayé plusieurs techniques, mais le fond est toujours noir.

Comment puis-je créer une image transparente et y dessiner des lignes ?

22
demandé sur Julien Poulin 2009-04-02 12:51:48

2 réponses

Appel Graphics.Clear(Color.Transparent) pour, enfin, effacer l'image. N'oubliez pas de le créer avec un format de pixel qui a un canal alpha, par exemple PixelFormat.Format32bppArgb. Comme ceci:

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);
}

Suppose que vous êtes usingSystem.Drawing et System.Drawing.Imaging.

Edit: on dirait que vous n'avez pas vraiment besoin du Clear(). Il suffit de créer l'image avec un canal alpha pour créer une image vierge (entièrement transparente).

37
répondu OregonGhost 2009-04-02 09:00:21

cela pourrait aider(quelque chose que j'ai mis ensemble qui place le fond d'une forme de fenêtres à une image 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;

    }
0
répondu Erling Paulsen 2009-04-02 09:12:13