#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 см.:
- http://msdn.microsoft.com/en-us/library/3z132tat.aspx
- http://msdn.microsoft.com/en-us/library/system.drawing.imaging.pixelformat.aspx
РЕДАКТИРОВАТЬ — согласно комментарию:
Чтобы нарисовать нужный PNG, вам нужно использовать другой CompositingMode
— SourceOver
вместо SourceCopy
.
Комментарии:
1. кажется, что это сохраняет png, но вы не можете видеть цвет фона через него?