原始像素数组到灰度BitmapImage

时间:2015-03-16 21:17:05

标签: 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;
}

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

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

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

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