【问题标题】:How to get specific portion of data from 1D array?如何从一维数组中获取特定部分的数据?
【发布时间】:2021-08-28 12:59:01
【问题描述】:

我有一个常规的NativeArray 颜色。我想根据给定的矩形有效地采样并从该数组中获取特定部分的数据。

假设我有这个 5x5(长度为 25)大小的一维颜色数组,我需要从这个矩形 (x:2, y:1, w:3, h:2) 中获取数据,如下图所示

我该怎么做?

如果我尝试使用函数NativeArray<>.Copy,它会从索引复制到长度。因此,如果我指定索引 7 和 6 的长度,它将从 7 复制到 12,这对我不起作用。

【问题讨论】:

  • 您似乎需要两个特定部分。是什么阻止您进行两次必要的跟注,一次是 7-9,然后是 12-14?
  • 我可以这样做,但是我正在处理更大的图像,我认为它会非常低效
  • 我建议您重新格式化您的数据,以便您可以高效地执行此操作。
  • 如果是二维数组,则将它们存储到二维数组中。然后是关于设置索引的问题。您知道起点 (x,y),然后知道向右多远 (w)。对尽可能多的行 (y) 重复相同的操作,每次都增加 y 值。将所有内容放在一个列表中。

标签: c# arrays unity3d copy


【解决方案1】:

NativeArray.Copy 正如您发现的那样,可以在副本应该开始的位置获取开始索引,在应该结束的位置获取结束索引。你的场景更复杂。 您可以将 Native 数组视为 2D 数组,并使用嵌套的 for 循环将元素从其中复制到目标。 Copy 方法也一样,不是什么神奇的东西。

您可以使用以下公式将 2D x, y 索引转换为 1D 索引

i = y * width + x

【讨论】:

  • 如果对您有帮助,请标记为答案。
猜你喜欢
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多