2010-07-15 29 views
18

Tengo dos mapas de bits, llamados largeBmp y smallBmp. Quiero dibujar smallBmp en largeBmp, luego dibujar el resultado en la pantalla. Los píxeles blancos de SmallBmp deben ser transparentes. Aquí está el código que estoy usando:C#: Dibujar un mapa de bits en otro, con transparencia

public Bitmap Superimpose(Bitmap largeBmp, Bitmap smallBmp) { 
    Graphics g = Graphics.FromImage(largeBmp); 
    g.CompositingMode = CompositingMode.SourceCopy; 
    smallBmp.MakeTransparent(); 
    int margin = 5; 
    int x = largeBmp.Width - smallBmp.Width - margin; 
    int y = largeBmp.Height - smallBmp.Height - margin; 
    g.DrawImage(smallBmp, new Point(x, y)); 
    return largeBmp; 
} 

¡El problema es que el resultado se vuelve transparente dondequiera que smallBmp sea transparente! Solo quiero ver a largeBmp, no a lo que hay detrás.

Respuesta

22

CompositingMode.SourceCopy es el problema aquí. Desea CompositingMode.SourceOver para obtener mezcla alfa.

+0

+1, de acuerdo. El valor predeterminado es bueno. –

+0

¡Ah, eso fue tan fácil! –

1

Especifique el color de transparencia de su pequeño mapa de bits. p.ej.

Bitmap largeImage = new Bitmap(); 
Bitmap smallImage = new Bitmap(); 
--> smallImage.MakeTransparent(Color.White); 
Graphics g = Graphics.FromImage(largeImage); 
g.DrawImage(smallImage, new Point(10,10); 
+0

No, ya está convirtiendo blanco a transparente. El problema es que los cortes transparentes atraviesan ambas imágenes. –

Cuestiones relacionadas