2010-07-19 22 views
6

¡hy allí!cómo dibujar una imagen en un lienzo con transparencia/alfa

omití usings etc ... solo código claro:

var image = Image.FromFile(/* my magic source */); 
var bitmap = new Bitmap(image.Width, image.Height); 
var canvas = Graphics.FromImage(bitmap); 
var brush = new SolidBrush(/* my magic color */); 
canvas.FillRectangle(brush, 0, 0, image.Width, image.Height); 
canvas.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height)); 
canvas.Save(); 
bitmap.Save(/* my magic target */); 

quiero llamar image con alfa 55% en canvas. image es un archivo .png y utiliza la transparencia en sí. (NOTA: no quiero hacer image.MakeTransparent() - ya es transparente, solo necesito un efecto alfa)

¿cómo puedo lograr esto?

Respuesta

14

Trate ImageAttributes ColorMatrix y:

ColorMatrix cm = new ColorMatrix(); 
cm.Matrix33 = 0.55f; 
ImageAttributes ia = new ImageAttributes(); 
ia.SetColorMatrix(cm); 
canvas.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, ia); 
+0

trabajando como encanto! ¡Gracias! –

+7

su sobrecarga de 'DrawImage' no existe: he usado:' canvas.DrawImage (imagen, nuevo rectángulo (0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height , GraphicsUnit.Pixel, imageAttributes); ' –

+1

De esta manera parece que solo funciona para Rgb24 Pixel Format. Intenté Argb32 o Indexed8bpp, no es trabajo. – IlPADlI

Cuestiones relacionadas