当我将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
并以透明的方式阅读。我该如何解决这个问题?
答案 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位。