2010-07-15 3 views
18

Ho due bitmap, denominati largeBmp e smallBmp. Voglio disegnare smallBmp su largeBmp, quindi disegnare il risultato sullo schermo. I pixel bianchi di SmallBmp dovrebbero essere trasparenti. Ecco il codice che sto usando:C#: Disegna un bitmap su un altro, con trasparenza

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

Il problema è che il risultato si rivela trasparente ovunque piccoloBmp era trasparente! Voglio solo vedere fino a largeBmp, non a cosa c'è dietro.

risposta

22

CompositingMode.SourceCopy è il problema qui. Si desidera CompositingMode.SourceOver per ottenere la fusione alfa.

+0

+1, d'accordo. L'impostazione predefinita è buona. –

+0

Ah, è stato così facile! –

1

Specificare il colore della trasparenza della bitmap piccola. per esempio.

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, sta già convertendo il bianco in trasparente. Il problema è che i tagli trasparenti avvengono attraverso entrambe le immagini. –