C#-重塑阵列&;就地更改类型
我从磁盘上读取了一幅巨大的图像(例如,每像素16位时为1.800MP)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
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;i data.Add((ushort)((arr[i]这不是也复制了数据,所以内存消耗增加了一倍吗?此外,它还只是一个1D列表-它应该是ushort[,]
为什么它是二维的?是的,它使用了双内存。看看我刚刚发布的使用相同内存的技巧。这不是也复制了数据,所以内存消耗增加了一倍吗?此外,它还只是一个1D列表-应该是ushort[,]
为什么它是二维的?是的,它使用双内存。看看我刚刚发布的使用相同内存的技巧。你需要转换它吗?为什么不做一个索引器,甚至一个函数来获取x,y的ushort?在这个例子中你有字节[,]
。它不应该是字节[]
?是的,对不起,谢谢。修复了它,它当然应该是字节[]
你需要转换它吗?为什么不做一个索引器,甚至一个函数来获取x,y处的ushort?你在示例中有字节[],]
。它不应该是字节[]
?是的,对不起,谢谢。修复了它,它当然应该是字节[]