Можно ли получить IntPtr из массива int []? - PullRequest
8 голосов
/ 10 февраля 2010

Привет.

В C #: если у меня есть массив int [], объявленный так

int[] array = new array[size];

есть ли способ получить IntPtr из этого массива?

Дело в том, что я использую платформу EmguCV, и есть конструктор для создания изображения, которое переносит IntPtr в данные пикселей, чтобы построить изображение из массива (int []).

Image<Gray,Int32> result = new Image<Gray,int>(bitmap.Width,bitmap.Height,stride,"**array.toPointer??**");

Кстати, если бы кто-нибудь сказал мне, как рассчитать шаг, это было бы здорово.

Ответы [ 2 ]

15 голосов
/ 11 февраля 2010

Вы должны быть в состоянии сделать это без небезопасного кода, используя GCHandle. Вот образец:

GCHandle handle = GCHandle.Alloc(array, GCHandleType.Pinned);
try
{
    IntPtr pointer = handle.AddrOfPinnedObject();
}
finally
{
    if (handle.IsAllocated)
    {
        handle.Free();
    }
}
7 голосов
/ 10 февраля 2010

Используйте небезопасный код, например:

unsafe
{
  fixed (int* pArray = array)
  {
    IntPtr intPtr = new IntPtr((void *) pArray);
  }
}
...