原始像素数组到灰度BitmapImage

我有一组原始像素数据。 我想将其转换为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; } 

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

在返回位图之前尝试添加它:

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

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

您的图像需要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;