「データ」プロパティ EmguCV MCvMat 構造体にアクセスする必要があります。しかし、そのプロパティはポインター (IntPtr) です。このプロパティ (データ) の構造は共用体であることがわかりました。こんな感じです:
union Data
{
char* ptr; // Data pointer for an unsigned char matrix
short* s; // Data pointer for a short matrix
int* i; // Data pointer for an integer matrix
float* fl; // Data pointer for a float matrix
double* db; // Data pointer for a double matrix
} Data;
私はC#でこれのための構造を作成しようとしました:
[StructLayout(LayoutKind.Explicit)]
struct MCvMatData
{
[FieldOffset(0)]
public char[] ptr; // Data pointer for an unsigned char matrix
[FieldOffset(0)]
public short[] s; // Data pointer for a short matrix
[FieldOffset(0)]
public int[] i; // Data pointer for an integer matrix
[FieldOffset(0)]
public float[] fl; // Data pointer for a float matrix
[FieldOffset(0)]
public double[] db; // Data pointer for a double matrix
}
Marshel を使用して変換し、
MCvMat mat = (MCvMat)Marshal.PtrToStructure(pMat, typeof(MCvMat));
MCvMatData matdata = (MCvMatData)Marshal.PtrToStructure(mat.data, typeof(MCvMatData));
しかし、これは私に例外を与えます。私がする必要があるのは:
- このポインターにアクセスするために C# でデータ構造を作成するか、
- MCvMat.dataプロパティにアクセスするその他の方法