Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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_Pointers_Reshape_Unsafe - Fatal编程技术网

C#-重塑阵列&;就地更改类型

C#-重塑阵列&;就地更改类型,c#,arrays,pointers,reshape,unsafe,C#,Arrays,Pointers,Reshape,Unsafe,我从磁盘上读取了一幅巨大的图像(例如,每像素16位时为1.800MP)Magick.Net为我提供了一个1D字节数组,因此每个像素是数组中的2个元素。我需要一个二维数组ushort进行处理 不用说,BlockCopy等都是被禁止的——内存使用率翻倍不是一个选项 数据在内存中已经有了正确的顺序,我只需要以某种方式将数组从byte[]转换为ushort[,] 所以基本上,我在寻找一个函数,它可以: ushort[,] convertByteToUshort(byte[] arr, int width

我从磁盘上读取了一幅巨大的图像(例如,每像素16位时为1.800MP)
Magick.Net
为我提供了一个1D字节数组,因此每个像素是数组中的2个元素。我需要一个二维数组
ushort
进行处理

不用说,
BlockCopy
等都是被禁止的——内存使用率翻倍不是一个选项

数据在内存中已经有了正确的顺序,我只需要以某种方式将数组从
byte[]
转换为
ushort[,]

所以基本上,我在寻找一个函数,它可以:

ushort[,] convertByteToUshort(byte[] arr, int width, int height)
我知道图像的宽度和高度(因此,2d数组),我想我需要使用
safe
code和
fixed
作为指针。但是我不知道如何将引用转换为真正的
ushort[,]

有什么想法吗?

试试下面的方法:

        static ushort[] convertByteToUshort(byte[] arr)
        {
            List<ushort> data = new List<ushort>();

            for (int i = 0; i < arr.Length; i = +2)
            {
                data.Add((ushort)((arr[i] << 8) | arr[i + 1]));
            }
            return data.ToArray();
        }
静态ushort[]convertbyteosthort(字节[]arr)
{
列表数据=新列表();
对于(整数i=0;i
        static ushort[] convertByteToUshort(byte[] arr)
        {
            List<ushort> data = new List<ushort>();

            for (int i = 0; i < arr.Length; i = +2)
            {
                data.Add((ushort)((arr[i] << 8) | arr[i + 1]));
            }
            return data.ToArray();
        }
静态ushort[]convertbyteosthort(字节[]arr)
{
列表数据=新列表();
对于(整数i=0;idata.Add((ushort)((arr[i]这不是也复制了数据,所以内存消耗增加了一倍吗?此外,它还只是一个1D列表-它应该是
ushort[,]
为什么它是二维的?是的,它使用了双内存。看看我刚刚发布的使用相同内存的技巧。这不是也复制了数据,所以内存消耗增加了一倍吗?此外,它还只是一个1D列表-应该是
ushort[,]
为什么它是二维的?是的,它使用双内存。看看我刚刚发布的使用相同内存的技巧。你需要转换它吗?为什么不做一个索引器,甚至一个函数来获取x,y的ushort?在这个例子中你有
字节[,]
。它不应该是
字节[]
?是的,对不起,谢谢。修复了它,它当然应该是
字节[]
你需要转换它吗?为什么不做一个索引器,甚至一个函数来获取x,y处的ushort?你在示例中有
字节[],]
。它不应该是
字节[]
?是的,对不起,谢谢。修复了它,它当然应该是
字节[]