私は、カメラと契約を結び、この dll 内の 3d バイト配列にビデオ フレームを格納する delphi dll を持っています。rgb 形式を実装するには 3D ディメンションが必要であり、DLL のバックグラウンドに便利です (開発者が言ったように)。そのため、C# コードからその配列にアクセスし、ビットマップを作成してそのコンテンツを表示する必要があります。しかし、配列要素に適切にアクセスする方法がわかりません。これが私のコードです:
private unsafe void ByteArray2Bitmap(IntPrt data, int width, int height, int depth, out Bitmap bmp)
{
// create a bitmap and manipulate it
bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData bits = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, bmp.PixelFormat);
fixed(byte*** data = (byte***)(m_data.ToPointer()))
{
for (int i = 0; i < height; i++)
{
int* row = (int*)((byte*)bits.Scan0 + (i * bits.Stride));
for (int j = 0; j < width; j++)
{
int pixel = BitConverter.ToInt32(&data[i][j][0], 0);
row[j] = pixel;
}
}
}
bmp.UnlockBits(bits);
}
そのコード行でエラーが発生しました: The right hand side of a fixed statement assignment may not be a cast expression
fixed(byte*** data = (byte***)(m_data.ToPointer()))
Marshal Copy でコピーせずに多次元の管理されていない配列にアクセスする方法はありますか?