2011-07-27 11 views
5

Powiel możliwe:
Merging two images in C#/.NETScalanie dwóch PNG z przezroczystością i utrzymanie przejrzystości

Mam dwóch obrazów PNG i oba mają przejrzystość zdefiniowane. Muszę połączyć je w nowy obraz PNG, ale bez utraty przejrzystości w wyniku. Pomyśl o pierwszym obrazie jako głównym obrazie, a drugim o dodaniu nakładki, takiej jak wskaźnik dodaj/edytuj/usuń. Próbuję utworzyć małe narzędzie, które zajmie główny obraz i zestaw nakładek, a następnie wygeneruje wynikowy zestaw wyjściowych obrazów, które je łączą.

Wydaje się, że wiele odpowiedzi z rozwiązań dla PHP, ale nic dla C#/

+2

Prawdopodobny duplikat: http://stackoverflow.com/q/465172/15667. Sprawdź, czy to pomaga. – xan

+0

WinForms, ASP.Net lub WPF? –

Odpowiedz

17

To powinno zadziałać.

Bitmap source1; // your source images - assuming they're the same size 
Bitmap source2; 
var target = new Bitmap(source1.Width, source1.Height, PixelFormat.Format32bppArgb); 
var graphics = Graphics.FromImage(target); 
graphics.CompositingMode = CompositingMode.SourceOver; // this is the default, but just to be clear 

graphics.DrawImage(source1, 0, 0); 
graphics.DrawImage(source2, 0, 0); 

target.Save("filename.png", ImageFormat.Png); 
+0

Dzięki temu zadziałało dla mnie! –

1

Niestety nie wspomnieli jak masz piksele,

więc p-code:

// The result will have its alpha chanell from "first", 
// the color channells from "second". 

assert (first.width = second.width) 
assert (first.height = second.height) 

for y in 0..height 
    for x in 0..width 
     RGBA col_first = first(x,y) 
     RGBA col_second = second(x,y) 

     result(x,y) = RGBA(col_second.r, 
          col_second.g, 
          col_second.b, 
          col_first.a ))