独自の (内部) 画像処理ライブラリへの 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 データへのポインターを見つけて、このメソッドに渡すにはどうすればよいでしょうか?
明らかに、1 つのアプローチは、通常の Matlab C/C++ インターフェイスを使用して、matlab を「だまして」基になる配列データ構造へのポインターを明らかにし、そのポインターを IntPtr コンストラクターに渡すことです。次に、IntPtr を渡します。私たちは、「純粋な」C# 実装を持ち、C# インターフェイスに加えて C/C++ インターフェイスを持つ必要がないことを望んでいました。
もう 1 つの方法は、Matlab 呼び出しを使用して、matlab 配列を .NET 配列に変換することかもしれませんが、ConvertArray
それでも生データを指す IntPtr が必要です。
ここでは無関係なメモリ コピーは気にしません。これはパフォーマンス クリティカルなコードではなく、実験用のコードです。
誰でもこの問題と推奨事項の経験がありますか?
考え?