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到没有大小信息的字节数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章
System::IntPtr 到 C++/CLI 中的 int*
Marshal.Copy 不从字节数组复制到从 IntPtr 中提供的地址开始的结构中