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.
}

しかし、 を に書き込んでBitmapからMemoryStream読み取るとMemoryStream、透過性が失われます。すべてのアルファ値は になり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、透過的に読み返したいと思います。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

3

問題は次の行です:bmp.Save(ms, ImageFormat.Bmp)。ImageFormat.Bmpはアルファ値をサポートしていません。同じ効果を得るには、これをImageFormat.Pngに変更できます。

于 2012-09-18T15:19:06.017 に答える
2

AFAIKBMP形式は透過性をサポートしていません。フォーマットをたとえばPNGに変更することを確認してください。

bmp.Save(ms, ImageFormat.Png);

ただし、256番目のスポットに透明な色を追加する.bmpにインデックスを付けることができます。問題は、bmpの多くの画像要件が24ビットと32ビットであり、透明なインデックス付き画像は16ビットにしか変換されないことです。

于 2012-09-18T15:19:45.777 に答える