Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将PointF列表转换为IntPtr?_C#_.net_Emgucv - Fatal编程技术网

C# 如何将PointF列表转换为IntPtr?

C# 如何将PointF列表转换为IntPtr?,c#,.net,emgucv,C#,.net,Emgucv,我正在使用EmguCV,我不知道如何通过2xN、Nx2、3xN、Nx3或1xN(N是点数)的数组来获得图像点,如文档中所示 我有一个创建浮点[N,2]数组的方法,但是封送处理。复制没有多维数组的重载,我不知道如何将X和Y值作为一个值传递。尝试以下方法: float[,] floats = new float[2,3]; IntPtr intPtr = Marshal.UnsafeAddrOfPinnedArrayElement(floats, 0); 以下方法可能有效,但GC可能存在问题,因此

我正在使用EmguCV,我不知道如何通过2xN、Nx2、3xN、Nx3或1xN(N是点数)的数组来获得图像点,如文档中所示

我有一个创建浮点[N,2]数组的方法,但是封送处理。复制没有多维数组的重载,我不知道如何将X和Y值作为一个值传递。

尝试以下方法:

float[,] floats = new float[2,3];
IntPtr intPtr = Marshal.UnsafeAddrOfPinnedArrayElement(floats, 0);
以下方法可能有效,但GC可能存在问题,因此请谨慎使用:

float[,] floats = new float[3, 2];

fixed (void* pt = array)
{
    IntPtr intPtr = new IntPtr(pt);

    CallMethod(intPtr, other parameters...);
}
但是被调用的方法应该知道维度是什么。可以通过名称(DoSomething2x3、DoSomething3x2等)或参数(DoSomething(IntPtr ptr、int width、int height))

尝试以下方法:

float[,] floats = new float[2,3];
IntPtr intPtr = Marshal.UnsafeAddrOfPinnedArrayElement(floats, 0);
以下方法可能有效,但GC可能存在问题,因此请谨慎使用:

float[,] floats = new float[3, 2];

fixed (void* pt = array)
{
    IntPtr intPtr = new IntPtr(pt);

    CallMethod(intPtr, other parameters...);
}
但是被调用的方法应该知道维度是什么。可以通过名称(DoSomething2x3、DoSomething3x2等)或参数(DoSomething(IntPtr ptr、int width、int height))

您只需调用函数来创建这些矩阵。包含演示如何执行此操作的好示例

为了设置您可以使用的数据。它的效率不如直接指针访问,但从托管代码中很难实现。

您只需调用函数来创建这些矩阵。包含演示如何执行此操作的好示例


为了设置您可以使用的数据。它的效率不如直接指针访问,但从托管代码中很难实现。

你说得对。我没想到。编辑后再复习以获得更多反馈。不管你编辑了多少,它总是会出错的。您需要为openCV创建正确的数据结构。你不能发明你自己的数据结构。根据OP,他只需要一个二维数组作为IntPtr,这就是我在这里做的。编辑是为了确保GC不会在内存中移动数组。你说得对。我没想到。编辑后再复习以获得更多反馈。不管你编辑了多少,它总是会出错的。您需要为openCV创建正确的数据结构。你不能发明你自己的数据结构。根据OP,他只需要一个二维数组作为IntPtr,这就是我在这里做的。编辑是为了确保GC不会在内存中移动数组。非常感谢。另一个快速问题:我应该如何更新MCvScalar?它的构造函数只有两个。这是另一个问题。现在我不知道答案。我猜您只需要使用double,在这个过程中,某些东西会转换为您选择的标量类型。非常感谢。另一个快速问题:我应该如何更新MCvScalar?它的构造函数只有两个。这是另一个问题。现在我不知道答案。我的猜测是,您只需要使用double,在某种程度上,某些东西会转换为您选择的标量类型。