Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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#_Image - Fatal编程技术网

C# 图像到阵列,维度丢失?

C# 图像到阵列,维度丢失?,c#,image,C#,Image,我正在尝试将JPG图像转换为(双)2d数组。使用: Image image = Image.FromFile("image.jpg"); 我得到了一张500 x 500的图像(根据图像.大小.高度(宽度))。但是当我尝试使用 byte[] arr; using (MemoryStream ms = new MemoryStream()) { image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); arr = ms.ToA

我正在尝试将JPG图像转换为(双)2d数组。使用:

Image image = Image.FromFile("image.jpg");
我得到了一张500 x 500的图像(根据图像.大小.高度(宽度))。但是当我尝试使用

byte[] arr;
using (MemoryStream ms = new MemoryStream())
{
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    arr = ms.ToArray();
}

我得到
arr.GetLength(0)=35640
,它小于500*500=250000。之后,我将1d数组
arr
转换为2d数组。我缺少什么吗?

如果以JPEG格式保存图像,写入流的像素将被压缩


如果要处理图像的像素,可能应该将图像加载到位图中,然后调用Bitmap.LockBits获取内存中的原始像素。

您没有保存像素表示。。您正在保存JPEG文件的字节。如果需要实际像素,则需要在像素上循环


还要注意,每个像素至少有3个组件:红色、绿色、蓝色。

BMP格式仍将包含BMP标头数据,并且不会产生250000个元素的数组。您需要注意像素格式,以便正确浏览原始像素内存。如果你不关心速度,还有Bitmap.GetPixel(x,y),它将返回x,y位置的像素颜色。它很慢,但很容易使用。看起来我需要将结果颜色(RGB结构)转换为单个像素值。还在努力。如果我错了,请纠正我(最初的目标是从位图->500x500双数组开始)。谢谢你的建议,明白了。按照Greg的回答…Thank.JPEG是一种基于有损压缩的文件格式。一个500x500像素的JPEG文件可能会占用不同的内存量,具体取决于图像的内容-纯单色会非常小,而照片会大得多,即使它们具有相同的像素数。确定。如何在像素上循环?我看到了一个GetPixel方法,但只适用于位图。这个JPG实际上是从FITS文件转换而来的。它应该是灰度的(或者至少我希望它是灰度的,也就是说,每像素只有一个值,而不是3)。我尝试了CSharpFITS,但无法将其作为参考正确加载…请参见dthorpe答案下的讨论。