从MemoryStream加载时,Bitmap没有透明度

时间:2012-09-18 15:08:49

标签: c# bitmap memorystream

当我将Bitmap写入文件并从文件中读取时,我正确地获得了透明度。

using (Bitmap bmp = new Bitmap(2, 2))
{
    Color col = Color.FromArgb(1, 2, 3, 4);
    bmp.SetPixel(0, 0, col);
    bmp.Save("J.bmp");
}

using (Bitmap bmp = new Bitmap("J.bmp"))
{
    Color col = bmp.GetPixel(0, 0);
    // Value of col.A = 1. This is right.
}

但如果我将Bitmap写入MemoryStream并从MemoryStream读取,则透明度已被删除。所有Alpha值都变为255

MemoryStream ms = new MemoryStream();
using (Bitmap bmp = new Bitmap(2, 2))
{
    Color col = Color.FromArgb(1, 2, 3, 4);
    bmp.SetPixel(0, 0, col);
    bmp.Save(ms, ImageFormat.Bmp);
}

using (Bitmap bmp = new Bitmap(ms))
{
    Color col = bmp.GetPixel(0, 0);
    // Value of col.A = 255. Why? I am expecting 1 here.
}

我希望将Bitmap保存到MemoryStream并以透明的方式阅读。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

问题在于这一行:bmp.Save(ms, ImageFormat.Bmp)。 ImageFormat.Bmp不支持alpha值,您可以将其更改为ImageFormat.Png以获得相同的效果。

答案 1 :(得分:2)

AFAIK BMP格式不支持透明度。检查将格式更改为,例如,PNG:

bmp.Save(ms, ImageFormat.Png);

然而,您可以索引.bmp,它将在第256个点中添加透明色。问题是,bmp的很多图像要求是24位和32位,透明索引图像只能转换为16位。