C#-重塑数组并更改类型

问题描述 投票:0回答:1

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

不用说,BlockCopy之类的内容被禁止-不能将内存使用量增加一倍。

数据在内存中已经具有正确的顺序,我只需要以某种方式将数组从byte[]“投射”到ushort[,]

因此,基本上,我正在寻找可以执行此操作的函数:

ushort[,] convertByteToUshort(byte[,] arr, int width, int height)

我知道图像的宽度和高度(以及2d数组的高度),我想我将需要使用unsafe代码和fixed作为指针。但是我不知道如何将引用转换为真实的ushort[,]

有什么想法吗?

c# arrays pointers reshape unsafe
1个回答
0
投票

尝试以下内容:

        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();
        }
© www.soinside.com 2019 - 2024. All rights reserved.