从字节数组创建位图

时间:2014-06-03 10:46:54

标签: c# image-processing bitmap

我有一台扫描仪可以提供灰度8位图像。我的目标是将此图像转换为单色,我已经实现了。要转换我需要操作位图对象,而不仅仅是字节数组。我从字节数组中获取Bitmap的代码如下所示:

 public static Bitmap ByteArrayToBitmap(byte[] data, int width, int height)
 {
    Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
    BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
    Marshal.Copy(data, 0, bmpData.Scan0, data.Length);
    bmp.UnlockBits(bmpData);
    bmp.Save(@"C:\Type7Test\TestImage.bmp", ImageFormat.Bmp);

    return bmp;
 }

我的问题是,从这一点来看,位图的格式化方式是错误的。注意我将位图保存到磁盘的行(仅用于测试),结果如下:

Scanned Canon EOS User guide

正如您所看到的,这不是预期的图像。我希望这是结果:

enter image description here

我怀疑PixelFormats和位图的创建有问题。 那么有人能指出我正确的方向从原始图像数据数组创建一个正确的位图吗?

1 个答案:

答案 0 :(得分:0)

在考虑之后,你确定PixelFormat.Format8bppIndexed格式正确吗?创建了位图,它 - 或多或少 - 看起来像所需的图像。这表明您为单张图片提供了太多或太少的数据 - 这意味着您的PixelFormat可能是错误的。

您可以尝试使用不同类型进行试验,并检查哪种类型有效。他们保持警惕,取决于你的图像有多少颜色(颜色越多,你需要的每像素比例越大)。