Копирую изображение. (Мой реальный код изменяет размер изображения, но это не имеет отношения к моему вопросу.) Мой код выглядит примерно так.
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()
перенести прозрачные пленки / альфа-канал в новое изображение, а затем сохранить их при сохранении файла?
saveFormat
? Это должен бытьPixelFormat.Format32bppArgb
(или другой формат с обработкой альфа-канала). Попробуйте также:using (Image dest = new Bitmap(width, height, PixelFormat.Format32bppArgb))
. - person Lukasz M   schedule 19.05.2012saveFormat
будет варьироваться в зависимости от формата входного файла. Если входной файл не поддерживает альфа-канал, можно с уверенностью предположить, что изображение не будет содержать пиксели альфа-канала. - person Jonathan Wood   schedule 19.05.2012saveFormat
для файлов GIF :)? - person Lukasz M   schedule 19.05.2012ImageFormat.Gif
. - person Jonathan Wood   schedule 19.05.2012using (Image dest = new Bitmap(src, width, height))
. Это делает изображение совместимым с исходным изображением. Как и в вашей рекомендации, он поддерживает альфа-каналы, но, к сожалению, не поддерживает прозрачность GIF. - person Jonathan Wood   schedule 19.05.2012if (saveFormat == ImageFormat.Gif && src.Palette.Entries.Length > 0) { System.Drawing.Color firstColor = src.Palette.Entries[0]; src.Palette.Entries[0] = System.Drawing.Color.FromArgb(0, firstColor); }
перед сохранением файла. - person Lukasz M   schedule 19.05.2012src.Palette.Entries.CopyTo(dest.Palette.Entries, 0);
- person yamen   schedule 19.05.2012