выровнять png поверх растрового изображения с помощью c#

#c# #asp.net #system.drawing

#c# #asp.net #system.drawing

Вопрос:

Я пытаюсь выровнять png с прозрачностью поверх растрового изображения сплошным цветом.

пока у меня есть это

     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 сверху?

Ответ №1:

изменить using (Image IMG1 = new Bitmap(251, 400)) на using (Image IMG1 = new Bitmap(251, 400, PixelFormat.Format32bppArgb)) .

Ссылки на MSDN см.:

РЕДАКТИРОВАТЬ — согласно комментарию:

Чтобы нарисовать нужный PNG, вам нужно использовать другой CompositingMode SourceOver вместо SourceCopy .

Комментарии:

1. кажется, что это сохраняет png, но вы не можете видеть цвет фона через него?