Вопрос

Приветствую вас.

В 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??**");

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

Это было полезно?

Решение

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

GCHandle handle = GCHandle.Alloc(array, GCHandleType.Pinned);
try
{
    IntPtr pointer = handle.AddrOfPinnedObject();
}
finally
{
    if (handle.IsAllocated)
    {
        handle.Free();
    }
}

Другие советы

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

unsafe
{
  fixed (int* pArray = array)
  {
    IntPtr intPtr = new IntPtr((void *) pArray);
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top