使用Graphics.DrawImage()以透明度/ Alpha通道绘制图像

我正在复制一张图片。 (我的实际代码是调整图像大小,但这与我的问题无关。)我的代码看起来像这样。

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通道传输到新图像,然后在保存文件时保留它们?

目前还不清楚,有很多你没说。 透明度最大的问题是你看不到它。 您跳过了几个步骤,没有明确指定新位图的像素格式,您根本没有初始化它并且没有说明您使用的输出格式。 有些人不支持透明度。 所以让我们制作一个让它变得清晰的版本。 从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); } 

生成此图片:

在此处输入图像描述

您可以清楚地看到蓝色背景,因此透明度有效。