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);
}
除非从具有透明度(例如GIF)或Alpha通道(例如PNG)的图像加载src
,否则这似乎很有效。
如何让DrawImage()
将透明胶片/ Alpha通道传输到新图像,然后在保存文件时保留它们?
答案 0 :(得分:28)
目前还不清楚,有很多你没说。透明度最大的问题是你看不到它。您跳过了几个步骤,没有明确指定新位图的像素格式,您根本没有初始化它,也没有说明您使用的输出格式。有些人不支持透明度。所以让我们制作一个让它变得清晰的版本。从paint.net中的PNG图像看起来像这样:
使用此代码
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);
}
制作此图片:
您可以清楚地看到蓝色背景,因此透明度有效。
答案 1 :(得分:1)
我发现此线程的原因是我遇到了同样的问题(即DrawImage没有复制alpha通道),但就我而言,这仅仅是因为我忽略了我使用PixelFormat.Format32bppRgb
而不是PixelFormat.Format32bppArgb
。 Lukasz M在评论中说的差不多。