【发布时间】:2012-05-18 20:02:20
【问题描述】:
我正在复制一张图片。 (我的实际代码正在调整图像大小,但这与我的问题无关。)我的代码看起来像这样。
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)或 alpha 通道(如 PNG)的图像加载的。
如何让DrawImage() 将透明胶片/Alpha 通道传输到新图像,然后在保存文件时保留它们?
【问题讨论】:
-
问题是
saveFormat变量的值是多少?它应该是PixelFormat.Format32bppArgb(或处理 Alpha 通道的其他格式)。也可以试试:using (Image dest = new Bitmap(width, height, PixelFormat.Format32bppArgb)). -
这似乎适用于 Alpha 通道,但不适用于 GIF 透明胶片。
saveFormat将根据输入文件的格式而有所不同。如果输入文件不支持 alpha 通道,则可以安全地假设图像不包含 alpha 通道像素。 -
那么,
saveFormat对于 GIF 文件的价值是什么:)? -
在这种情况下,它是
ImageFormat.Gif。 -
感谢您的快速回复。与此同时,我发现了一篇关于 GIF 透明度的文章。看看吧:support.microsoft.com/kb/319061。我想基本上你只需要获取图像的调色板并将第一个索引中保存的颜色设置为透明的。
标签: c# .net drawimage alpha-transparency