Unity c#intptr到没有大小信息的字节数组[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity c#intptr到没有大小信息的字节数组[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我的问题是,当您从c ++知道uchar *的行和列信息时,我如何将其转换为字节数组。我必须给Marshal.Copy提供正确的参数。

当我没有大小信息时,如何将intptr转换为字节数组?我有c ++返回的行和列信息,但我无法做到。这是代码。当我实现它时,统一崩溃(我想是边界异常)。

                int rows = 0;
                int cols = 0;
                Marshal.Copy(imageData, 0, pnt, imageData.Length);
                IntPtr returnPtr = cppExternalMethod(pnt, ref rows, ref cols);
                int size = rows * cols * 3; //i'm not sure about that
                byte[] result = new byte[size];
                Marshal.Copy(returnPtr, result, 0, size);
                Marshal.FreeHGlobal(returnPtr);
                Marshal.FreeHGlobal(pnt);

c ++部分:

uchar* cppExternalMethod(uchar* frameData, int* rows, int* cols)
{
     Mat img(HEIGHT, WIDTH, CV_8UC3);

    img.data = (uchar*)(frameData);
    Mat result = doWork(img);

    uchar* resultArray = result.data;

    Size s = result.size();
    int rows_ = s.height;
    int cols_ = s.width;
    *rows = rows_;
    *cols = cols_;
    return resultArray;
}

编辑:实际上size = rows * cols * 3应该工作,我尝试另一个项目(我现在的大小),这个相等。

答案

如果您的图像是3通道(如RGB),则您的尺寸不正确。此外,您应该使用'out'参数而不是'ref'与cppExternalMethod。

以上是关于Unity c#intptr到没有大小信息的字节数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

来自 intPtr 的 for 循环,如何?

System::IntPtr 到 C++/CLI 中的 int*

Marshal.Copy 不从字节数组复制到从 IntPtr 中提供的地址开始的结构中

不同应用程序(WPF 和 Unity)中的 C# struct 序列化返回不同大小的字节数组

IntPtr 大小的问题

C 语言文件操作 ( 使用 fseek 函数生成指定大小文件 | 偏移量 文件字节数 - 1 )