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 ?
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 using
System.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).
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;
}