나는 카메라와 계약을 맺고이 dll 안에 3D 바이트 배열에 비디오 프레임을 저장하는 델파이 dll을 가지고있다. rgb 형식을 구현하려면 3D 차원이 필요하며 dll 배경에 편리합니다 (개발자가 말했듯이). 그래서 C# 코드에서 배열에 액세스하고 Bitmap을 만들고 내용을 표시해야합니다. 하지만 배열 요소를 제대로 액세스하는 방법을 이해하지 못합니다. 코드 줄은 오류가 발생했습니다C에서 델파이 dll 내부에 관리되지 않는 배열에 액세스 #
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()))
가되어 주조 식 멀티 dimentional에 액세스 할 수있는 방법하지 않을 수 있습니다 마샬 복사로 복사하지 않고 관리되지 않는 배열?
힌트를 보내 주셔서 감사합니다. 아마, 나는 하루의 끝에서 너무 피곤했다. 두 번째 부분에서는 rgb 색상 (byte [i] [j] [0] - r, byte [i] [j] [1] -g, [i])을 나타내므로 바이트의 3 차원을 액세스하려고합니다. ] [j] [2] - b). 그래서, 바이트 배열을 int (비트 맵 픽셀)로 변환해야합니다. – ilja