// bitmapPaddedDataSize es ( stride * alto * bytesPorPixel)
byte[] bmpBytes= new byte[bitmapPaddedDataSize];
//Copiar el puntero a un array de bytes
System.Runtime.InteropServices.Marshal.Copy((IntPtr)scan0, 0, bmpBytes, bmpBytes.Length);
//Obtener memoria para los nuevos datos de bitmap,
IntPtr punteroDatos = System.Runtime.InteropServices.Marshal.AllocHGlobal(bitmapPaddedDataSize);
//Copiar el array de bytes creado al puntero
System.Runtime.InteropServices.Marshal.Copy(bmpBytes, 0, punteroDatos, bmpBytes.Length);
//Crear bmp
captura = new Bitmap(anchoVideo, altoVideo, -stride,
PixelFormat.Format24bppRgb, punteroDatos );
handle.Free();