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

问题描述 投票:-1回答:1

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

我的问题是,当您从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应该工作,我尝试另一个项目(我现在的大小),这个相等。

c# c++ unity3d dll intptr
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.