Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#图像类到字节数组长度问题_C#_Arrays_Image - Fatal编程技术网

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

C#图像类到字节数组长度问题,c#,arrays,image,C#,Arrays,Image,我使用C#的图像类来读取文件: var image = Image.FromFile(filePath); 这意味着图像已被图像数据填充 我现在将此图像转换为字节数组: static byte[] ImageToByteArray(Image imageIn) { var ms = new MemoryStream(); imageIn.Save(ms, ImageFormat.Bmp); return ms.ToArray(); } var imageMatrix

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

var image = Image.FromFile(filePath);
这意味着
图像
已被图像数据填充

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

static byte[] ImageToByteArray(Image imageIn)
{
    var ms = new MemoryStream();
    imageIn.Save(ms, ImageFormat.Bmp);
    return ms.ToArray();
}
var imageMatrix = byte[image.Height, image.Width];
现在我想把这个字节数组转换成矩阵数组,2d字节数组:

static byte[] ImageToByteArray(Image imageIn)
{
    var ms = new MemoryStream();
    imageIn.Save(ms, ImageFormat.Bmp);
    return ms.ToArray();
}
var imageMatrix = byte[image.Height, image.Width];
当我执行for循环,将值移动到新的字节矩阵中时,我得到一个
IndexOutOfRangeException

经检查,

var isImageLengthSameAsByteLength = imageByteArray.Length == (image.Width * image.Height);
IsImageLength SameasByTeleLength
值为false,查看值后,数组长度为132442,
(宽度*高度)
为130995

因此,这两者之间显然存在一些差异。我认为有一些额外的东西已经被编码到图像字节数组中,因为很明显,
高度
宽度
告诉你图像的大小


有什么想法吗,谢谢,

你似乎认为

imageIn.Save(ms, ImageFormat.Bmp);
将每像素写入一个字节。事实上,它是在存储它-这很可能是超过一个字节每像素由于标题,事实上,你可以有超过256种颜色在一个BMP文件。或者,如果压缩图像,它可能会小于每像素一个字节


从根本上说,这种到字节数组的转换不是您想要的,因此您需要找到一种替代方法。您可能想看看它是否实际上是一个
位图
对象。

您似乎认为

imageIn.Save(ms, ImageFormat.Bmp);
将每像素写入一个字节。事实上,它是在存储它-这很可能是超过一个字节每像素由于标题,事实上,你可以有超过256种颜色在一个BMP文件。或者,如果压缩图像,它可能会小于每像素一个字节


从根本上说,这种到字节数组的转换不是您想要的,因此您需要找到一种替代方法。您可能想看看它是否实际上是一个
位图
对象。

您似乎认为

imageIn.Save(ms, ImageFormat.Bmp);
将每像素写入一个字节。事实上,它是在存储它-这很可能是超过一个字节每像素由于标题,事实上,你可以有超过256种颜色在一个BMP文件。或者,如果压缩图像,它可能会小于每像素一个字节


从根本上说,这种到字节数组的转换不是您想要的,因此您需要找到一种替代方法。您可能想看看它是否实际上是一个
位图
对象。

您似乎认为

imageIn.Save(ms, ImageFormat.Bmp);
将每像素写入一个字节。事实上,它是在存储它-这很可能是超过一个字节每像素由于标题,事实上,你可以有超过256种颜色在一个BMP文件。或者,如果压缩图像,它可能会小于每像素一个字节



从根本上说,这种到字节数组的转换不是您想要的,因此您需要找到一种替代方法。您可能想看看它是否实际上是一个
位图
对象。

图像通常在4字节边界(或类似边界)上对齐,每个像素对应4字节,因此,您的
字节
数组大小确实应该比
宽度*高度
大4倍。@KingKing:我不明白为什么您会认为-Save方法使用您告诉它的任何文件格式,所以它取决于BMP文件格式的细节和编码器使用的选项。例如,会有标题信息。@Jonsket是的,4字节只是一种常见的情况,事实上我们可以设置imageformat(当使用图像的构造函数时)。图像通常在4字节边界(或类似边界)上对齐,每个像素对应4个字节,因此,您的
字节
数组大小确实应该比
宽度*高度
大4倍。@KingKing:我不明白为什么您会认为-Save方法使用您告诉它的任何文件格式,所以它取决于BMP文件格式的细节和编码器使用的选项。例如,会有标题信息。@Jonsket是的,4字节只是一种常见的情况,事实上我们可以设置imageformat(当使用图像的构造函数时)。图像通常在4字节边界(或类似边界)上对齐,每个像素对应4个字节,因此,您的
字节
数组大小确实应该比
宽度*高度
大4倍。@KingKing:我不明白为什么您会认为-Save方法使用您告诉它的任何文件格式,所以它取决于BMP文件格式的细节和编码器使用的选项。例如,会有标题信息。@Jonsket是的,4字节只是一种常见的情况,事实上我们可以设置imageformat(当使用图像的构造函数时)。图像通常在4字节边界(或类似边界)上对齐,每个像素对应4个字节,因此,您的
字节
数组大小确实应该比
宽度*高度
大4倍。@KingKing:我不明白为什么您会认为-Save方法使用您告诉它的任何文件格式,所以它取决于BMP文件格式的细节和编码器使用的选项。例如,会有标题信息。@Jonsket是的,4字节只是一种流行的情况,事实上我们可以设置imageformat(当使用图像的构造函数时)。这确实让我的生活变得有点困难,我基本上是在为Uni课程编写自己的压缩算法@你可以研究一下
ImageFormat
选项是否提供了你可以轻松使用的数据-只要你基本上理解
Save
方法的要点。我从一个用C编写的FFT类中得到了这个函数,它利用了锁位,我唯一没有得到的是当它开始使用
byte*
并使用
byte*[0]
时,它使它看起来像一个数组,我将在上面写一个问题并链接到这里!看看这个链接,它确实让我的生活变得有点困难,我基本上是在写我的ow