Использование Графики.DrawImage() для рисования изображения с прозрачностью / альфа-каналом
я копирую изображение. (Мой фактический код изменяет размер изображения, но это не относится к моему вопросу. Мой код выглядит примерно так.
Image src = ...
using (Image dest = new Bitmap(width, height))
{
Graphics graph = Graphics.FromImage(dest);
graph.InterpolationMode = InterpolationMode.HighQualityBicubic;
graph.DrawImage(src, 0, 0, width, height);
dest.Save(filename, saveFormat);
}
это, кажется, работает отлично, если src
загружается из изображения с прозрачными пленками (например, GIF) или альфа-каналом (например, PNG).
как я могу получить DrawImage()
перенести прозрачные пленки / альфа-канал на новое изображение, а затем сохранить их при сохранении файла?
1 ответов
Это довольно неясно, есть много, что вы не сказали. Самая большая проблема с прозрачностью заключается в том, что вы ее не видите. Вы пропустили пару шагов, вы явно не указали пиксельный формат вашего нового растрового изображения, вы вообще не инициализировали его и не сказали, какой формат вывода вы используете. Некоторые не поддерживают прозрачность. Итак, давайте сделаем версию, которая делает ее кристально ясной. Из PNG-изображения, которое выглядит так paint.net:
С помощью этого код
using (var src = new Bitmap("c:/temp/trans.png"))
using (var bmp = new Bitmap(100, 100, PixelFormat.Format32bppPArgb))
using (var gr = Graphics.FromImage(bmp)) {
gr.Clear(Color.Blue);
gr.DrawImage(src, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save("c:/temp/result.png", ImageFormat.Png);
}
производит этот образ:
вы можете четко видеть синий фон, чтобы прозрачность работала.