2011-11-08 23 views
1

我想在纯色位图上用透明度平铺一个png。平面png与位图顶部的c#

到目前为止我有此

using (System.Drawing.Image backImage = System.Drawing.Image.FromFile(layer1imagename)) 

    using (System.Drawing.Image frontImage = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath("~/") + layer2)) 

    using (Image IMG1 = new Bitmap(251, 400)) 
    using (Graphics compositeGraphics = Graphics.FromImage(IMG1)) 
    { 
     compositeGraphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; 
     compositeGraphics.DrawImageUnscaled(backImage, 0, 0); 
     compositeGraphics.DrawImageUnscaled(frontImage, 0, 0); 
     compositeGraphics.Dispose(); 
     frontImage.Dispose(); 
     backImage.Dispose(); 
     IMG1.Save(layer1imagename, System.Drawing.Imaging.ImageFormat.Png); 
    } 

然而这原来除去顶层的透明度。我如何保留顶部的透明PNG?

回答

2

变更using (Image IMG1 = new Bitmap(251, 400))变为using (Image IMG1 = new Bitmap(251, 400, PixelFormat.Format32bppArgb))

为MSDN的引用,请参阅:

编辑 - 按评论:

要画你想你需要使用一个不同的CompositingMode - SourceOver instead of SourceCopy的PNG。

+0

这似乎拯救了PNG,但你不能通过它看到背景颜色? – user987723

+0

@ user987723看到我的编辑上面... – Yahia

+0

你真了不起!多谢,伙计 – user987723