C#图像类到字节数组长度问题

时间:2013-12-06 16:59:20

标签: c# arrays image

我使用C#的Image类来读取文件:

var image = Image.FromFile(filePath);

这意味着image已经填充了图像数据。

我现在将此图像转换为字节数组:

static byte[] ImageToByteArray(Image imageIn)
{
    var ms = new MemoryStream();
    imageIn.Save(ms, ImageFormat.Bmp);
    return ms.ToArray();
}

现在我想将此Byte数组转换为矩阵数组,即2d字节数组:

var imageMatrix = byte[image.Height, image.Width];

当我执行for循环将值移动到新的字节矩阵中时,我得到IndexOutOfRangeException

检查时,

var isImageLengthSameAsByteLength = imageByteArray.Length == (image.Width * image.Height);

isImageLengthSameAsByteLength值为false,查看值后,数组长度为132442,(width * height)为130995。

因此,这些之间显然存在一些差异。我认为有一些额外的东西被编码到图像字节数组中,因为heightwidth显然会告诉你图像的大小。

任何想法,谢谢,

1 个答案:

答案 0 :(得分:3)

你似乎在假设

imageIn.Save(ms, ImageFormat.Bmp);

每个像素只写一个字节。实际上,它将它存储在BMP format中 - 由于标题,每个像素可能更多而不是一个字节,并且在BMP文件中可以有超过256种颜色。或者如果它压缩图像,它可能而不是每个像素一个字节。

从根本上说,这种到字节数组的转换不是你想要的 - 所以你需要设计一种替代方法。如果Bitmap.LockBits实际上是Bitmap对象,您可能需要查看{{3}}。