C#重塑阵列1-> 2 D,没有重复数据

时间:2016-10-18 12:30:46

标签: c# arrays camera reshape

我正在使用相机制造商提供的C#SDK。他们有一个方法:

CaptureImage(struct ExpSettings, ref ushort[] pixelbuffer)

我希望将一维数组pixelbuffer重新整形为2D数组。 现在我正在使用Jon Skeet建议的Buffer.BlockCopy,在这里有一个类似的问题。

但是我想是否有一种方法(在C#中)这样做而不必复制实际数据。在C中,我猜你可以使用一个联合。

你能以某种方式创建一个数组UInt16[,] My2DImageData = new UInt[1000, 1000],然后“将数据数组”指向上面的pixelbuffer吗?

感谢您的时间。 亲切的问候/亨里克

1 个答案:

答案 0 :(得分:4)

如果您只对通过索引器访问成员感兴趣并且不想复制数据,则可以使用包装类。

class ArrayWrapper<T>
{
    private readonly T[] _arr;
    private readonly int _w, _h;
    public ArrayWrapper(T[] arr, int w, int h)
    {
        if(arr == null)
            throw new ArgumentNullException("arr");

        if(arr.Length != w*h)
            throw new ArgumentException("Invalid array length", "arr");

        _arr = arr;
        _w = w;
        _h = h;
    }

    public T this[int i, int j]
    {
        get { return _arr[i*_w + j]; }
    }
}
var arr = new[] {
    0,  1,  2,  3, 
    4,  5,  6,  7, 
    8,  9,  10, 11, 
    12, 13, 14, 15 };
var wrapper = new ArrayWrapper<int>(arr, 4, 4);
Console.WriteLine(wrapper[1, 1]); // prints 5