1

我有一个专有(内部)图像处理库的 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。

我不介意这里有多余的内存副本,这不是性能关键代码,这是实验代码。

有没有人有这个问题的经验和建议?

想法?

4

1 回答 1

0

如果你不能得到 MathLab 数组的地址,你最好用一个接受(并返回)数组的方法来包装 3rd Party API

byte[] ConvertFromRGBToYCbCr(int ncols, int nrows, byte[] rgb)

然后使用这样的技术在 .net 中获取此数组的地址,以调用原始 RGBConvert 方法。

于 2013-01-29T07:41:02.887 回答