1

当我写入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.
}

但是,如果我将 a 写入BitmapaMemoryStream并从中读取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到 aMemoryStream并以透明的方式读回。我该如何解决这个问题?

4

2 回答 2

3

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

于 2012-09-18T15:19:06.017 回答
2

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

bmp.Save(ms, ImageFormat.Png);

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

于 2012-09-18T15:19:45.777 回答