将二进制数据从matlab传递给c#

时间:2013-01-28 17:00:59

标签: c# matlab image-processing

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

另一种途径可能是采用Matlab ConvertArray调用,将matlab数组转换为.NET数组,但是我仍需要一个指向原始数据的IntPtr。

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

任何人都有此问题和建议的经验吗?

思想?

1 个答案:

答案 0 :(得分:0)

如果你无法获得MathLab数组的地址,你最好用一个接受(并返回)数组的方法包装第三方API

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

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