Hi, I found a very quick method in the end using RtlMoveMemory:
[DllImport("kernel32")]
public static extern void RtlMoveMemory(IntPtr dest, IntPtr src, int len);
System.IntPtr pBuffer2 = Marshal.AllocHGlobal(BufferSize); //Assign unmanaged memory
RtlMoveMemory(pBuffer2, pBuffer, BufferSize); //Copy memory
byte* p2 = (byte*)(void*)pBuffer2;
// Use p2 to access image pixels
Marshal.FreeHGlobal(pBuffer2); //Free unmanaged memory
Thanks, for the help and hope this helps some one else.