原始像素数组到灰度BitmapImage

cha*_*ans 3 c# bitmap

我有一组原始像素数据.我想将其转换为8bpp Bitmap.

public static Bitmap ByteToGrayBitmap(byte[] rawBytes, int width, int height) 
{ 
    Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
    BitmapData  bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height),
                                    ImageLockMode.WriteOnly, bitmap.PixelFormat);

    Marshal.Copy(rawBytes, 0, bitmapData .Scan0, rawBytes.Length);
    bitmap.UnlockBits(bitmapData);

    return bitmap;
}
Run Code Online (Sandbox Code Playgroud)

位图看起来像彩色图像而不是灰度.

TaW*_*TaW 5

您的图像需要8位灰度调色板.

在您返回之前添加:

var pal = bmp.Palette;
for (int i = 0; i < 256; i++) pal.Entries[i] = Color.FromArgb(i, i, i);
bmp.Palette = pal;

return bmp;
Run Code Online (Sandbox Code Playgroud)


bok*_*beg 2

尝试在返回位图之前添加此内容:

for (int c = 0; c < bitmap.Palette.Entries.Length; c++)
    bitmap.Palette.Entries[c] = Color.FromArgb(c, c, c);
Run Code Online (Sandbox Code Playgroud)

它将创建一个典型的灰度调色板。

  • 请参阅下面的 TaW 答案。无法就地修改调色板属性。需要获取 Palette 属性,将 Entries 设置为灰度,然后设置 Palette 属性。 (2认同)