我有一个专有(内部)图像处理库的 C# 接口。
接口看起来像这样:
void RGBConvert::ConvertFromRGBToYCbCr(
int ncols,
int nrows,
IntPtr rgb,
IntPtr out)
其中 IntPtr 是指向底层内存的指针。我已经多次从 Matlab 调用 .NET 对象,但是将大型 C 数据数组传递到 C# 不是我做过的事情,而且我已经走到了死胡同。
Matlab 手册: http: //www.mathworks.com/help/matlab/matlab_external/handling-net-data-in-matlab_bte9oxc-1.html#bte9o7y-1表示不支持 IntPtr。我的意思是,它不会将 Unsigned8Bit 整数数组转换为 IntPtr 以传递给该方法。(如果你通过一些其他机制构造一个 IntPtr,Matlab 会像对待任何其他 .NET 对象一样对待它并传递它。)那么,我如何找到指向 Matlab 数据的指针,并将它传递给这个方法呢?
显然,一种方法是使用普通的 Matlab C/C++ 接口来“欺骗”matlab 显示指向底层数组数据结构的指针,然后将该指针传递给 IntPtr 构造函数。然后传递 IntPtr。我们曾希望有一个“纯”的 C# 实现,并且除了 C# 接口之外不必有 C/C++ 接口。
另一种方法可能是使用 MatlabConvertArray
调用,将 matlab 数组转换为 .NET 数组,但是我仍然需要一个指向原始数据的 IntPtr。
我不介意这里有多余的内存副本,这不是性能关键代码,这是实验代码。
有没有人有这个问题的经验和建议?
想法?