我正在使用相机制造商提供的C#SDK。他们有一个方法:
CaptureImage(struct ExpSettings, ref ushort[] pixelbuffer)
我希望将一维数组pixelbuffer重新整形为2D数组。
现在我正在使用Jon Skeet建议的Buffer.BlockCopy
,在这里有一个类似的问题。
但是我想是否有一种方法(在C#中)这样做而不必复制实际数据。在C中,我猜你可以使用一个联合。
你能以某种方式创建一个数组UInt16[,] My2DImageData = new UInt[1000, 1000]
,然后“将数据数组”指向上面的pixelbuffer吗?
感谢您的时间。 亲切的问候/亨里克
答案 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