2011-07-27 6 views
5

Possible en double:
Merging two images in C#/.NETfusionner deux images PNG avec transparence et conserver la transparence

J'ai deux images au format PNG et les deux ont défini la transparence. J'ai besoin de les fusionner ensemble dans une nouvelle image png mais sans rien perdre de la transparence dans le résultat. Pensez à la première image comme image principale et la seconde est utilisée pour ajouter une superposition, comme un indicateur d'ajout/édition/suppression. J'essaie de créer un petit utilitaire qui va prendre une image principale et un ensemble de superpositions, puis générer l'ensemble résultant des images de sortie qui les combinent.

Il semble y avoir beaucoup de réponses avec des solutions pour PHP, mais rien pour C#/

+2

Copie possible de: http://stackoverflow.com/q/465172/15667. Voir si cela aide. – xan

+0

WinForms, WPF ou ASP.Net? –

Répondre

17

Cela devrait fonctionner.

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

Merci cela a fonctionné pour moi! –

1

Malheureusement, vous ne l'avez pas mentionné comment vous obtenez les pixels,

donc 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 )) 
Questions connexes