Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

It is possible to get an IntPtr from an int[] array?

Greetings.

In C#: If I have an int[] array declared like this

int[] array = new array[size];

there is an way to get the IntPtr from this array?

The thing is that I'm using the EmguCV framework, and there is an constructor to create an image which takes an IntPtr to the pixel data, in order to build an image from an array (int[]).

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

By the way if someone could told me how to calculate the stride, that would be great.

like image 883
João Cardoso Avatar asked Feb 10 '10 15:02

João Cardoso


2 Answers

Use unsafe code, like this:

unsafe
{
  fixed (int* pArray = array)
  {
    IntPtr intPtr = new IntPtr((void *) pArray);
  }
}
like image 122
Marcel Gheorghita Avatar answered Oct 23 '22 07:10

Marcel Gheorghita


You should be able to do this without unsafe code using GCHandle. Here is a sample:

GCHandle handle = GCHandle.Alloc(array, GCHandleType.Pinned);
try
{
    IntPtr pointer = handle.AddrOfPinnedObject();
}
finally
{
    if (handle.IsAllocated)
    {
        handle.Free();
    }
}
like image 30
Bryan Avatar answered Oct 23 '22 05:10

Bryan