我复制的图像。 (我的实际代码调整图像大小,但是这是不相关的我的问题。)我的代码看起来是这样的。
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()
到透明胶片/ 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);
}
产生这一形象:
你可以清楚地看到蓝色的背景,使透明度的工作。
我发现这个线程,因为我有同样的问题(即的DrawImage没有复制alpha通道),但对我来说这只是因为我忽视的是,我用PixelFormat.Format32bppRgb
代替PixelFormat.Format32bppArgb
。 所以,几乎什么卢卡斯M在评论说。