我的问题是,当您从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 ++ part:
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应该可以工作,我尝试另一个项目(我现在的大小),这个等式成立。
答案 0 :(得分:1)
如果您的图片是3通道(如RGB),则尺寸不正确。此外,您应该使用'out'参数而不是'ref'与cppExternalMethod。