将位图保存为32bpp不会保持透明度

时间:2011-01-21 12:33:57

标签: c# bitmap drawing transparency

using (var bmp = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb))
using (var g = Graphics.FromImage(bmp))
{
    g.Clear(Color.Transparent);
    g.DrawImage(image, 0, 0);
    bmp.Save("image.bmp", ImageFormat.Bmp);
}

问题应该是明确的:为什么保存到 BMP 会将透明度转换为黑色,同时保存为 PNG 保持它

只是为了澄清: 图片 采用 Format8bppIndexed 格式,其调色板确实包含透明色(例如,它正确地绘制到表单/图片框上)

编辑:我的不好, Bitmap.Save()实际上以 Format32bppRgb 格式保存BMP,即使位图格式为 Format32bppArgb

1 个答案:

答案 0 :(得分:6)

这是因为默认情况下 bmp 文件格式不支持 png 文件格式的透明度。

如果你想要透明度,你将不得不使用png。压缩算法是无损的,因此您不会在图像中获得伪像。该文件在磁盘上占用的空间也会减少。