如何修改矢量的各个元素?

时间:2016-01-07 14:19:41

标签: c# arrays vector emgucv

我想读取并写入VectorOfFloat的各个元素。问题在于没有定义setter,这使得括号+索引方式只能读取元素。

VectorOfFloat vector = new VectorOfFloat(5);
// vector[2] = 2.5F; // does not work

有一个解决方法:

  1. 使用ToArray()
  2. 转换为数组
  3. 根据需要修改数组
  4. 使用Clear()Push()
  5. 写回数组
    float[] array = vector.ToArray();
    array[2] = 2.5F;
    vector.Clear();
    vector.Push(array); // does work but is retarded
    
    Console.WriteLine(vector[2]);
    

    仅仅编写一个元素似乎非常麻烦是否有更直接的方法? 另外,如果我可以解决这个问题,那么缺少什么是值得的呢?

1 个答案:

答案 0 :(得分:1)

评论是正确的。获取对非托管数组的访问权限的方法是通过StartAddress属性返回IntPtr

lock(vector) 
{
    var ptr_array=(float*)vector.StartAddress.ToPointer();
    ptr_array[4]=1.0f;    
}