我从磁盘上读取了一个巨大的图像(例如1.800MP @每像素16位)。 Magick.Net
为我提供了一个1D字节的数组,因此每个像素都是数组中的2个元素。我需要具有ushort
的二维数组才能进行处理。
不用说,BlockCopy
之类的内容被禁止-不能将内存使用量增加一倍。
数据在内存中已经具有正确的顺序,我只需要以某种方式将数组从byte[]
“投射”到ushort[,]
。
因此,基本上,我正在寻找可以执行此操作的函数:
ushort[,] convertByteToUshort(byte[,] arr, int width, int height)
我知道图像的宽度和高度(以及2d数组的高度),我想我将需要使用unsafe
代码和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();
}