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

本文关键字:matlab 二进制 数据 | 更新日期: 2023-09-27 17:56:17

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

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

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

思潮?

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

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

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

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