我有一个 delphi dll,它处理相机并将视频帧存储到这个 dll 中的 3d 字节数组。实现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);
}
那行代码出错:固定语句赋值的右侧可能不是强制转换表达式
fixed(byte*** data = (byte***)(m_data.ToPointer()))
是否有任何方法可以访问多维非托管数组而不使用 Marshal Copy 复制它们?