gpt4 book ai didi

C# reshape 数组 1->2 D 而不复制数据

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:45 25 4
gpt4 key购买 nike

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

CaptureImage(struct ExpSettings, ref ushort[] pixelbuffer)

我希望将一维数组像素缓冲区 reshape 为二维数组。现在我正在使用 Buffer.BlockCopy 正如 Jon Skeet 在 SO 上的类似问题中所建议的那样。

但是我在想是否有一种方法(在 C# 中)无需复制实际数据即可执行此操作。在 C 中,我猜你可以使用联合。

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

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

最佳答案

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

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

关于C# reshape 数组 1->2 D 而不复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40108326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com