Можно ли получить IntPtr из массива int[]?
Вопрос
Приветствую вас.
В 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);
}
}
Не связан с StackOverflow