c# struct copy unity3d marshalling

c# - Copia rápida de matriz Color32



struct copy (1)

¿Cuál sería un método rápido para copiar / convertir una array de Color32[] de Color32[] a un búfer de byte[] ? Color32 es una estructura de Unity 3D que contiene 4 bytes, R, G, B and A respectively . Lo que estoy tratando de lograr es enviar la imagen renderizada de la unidad a través de una tubería a otra aplicación ( Windows Forms ). Actualmente estoy usando este código:

private static byte[] Color32ArrayToByteArray(Color32[] colors) { int length = 4 * colors.Length; byte[] bytes = new byte[length]; IntPtr ptr = Marshal.AllocHGlobal(length); Marshal.StructureToPtr(colors, ptr, true); Marshal.Copy(ptr, bytes, 0, length); Marshal.FreeHGlobal(ptr); return bytes; }

Gracias y lo siento, soy nuevo en StackOverflow. Marinescu Alexandru


Terminé usando este código:

private static byte[] Color32ArrayToByteArray(Color32[] colors) { if (colors == null || colors.Length == 0) return null; int lengthOfColor32 = Marshal.SizeOf(typeof(Color32)); int length = lengthOfColor32 * colors.Length; byte[] bytes = new byte[length]; GCHandle handle = default(GCHandle); try { handle = GCHandle.Alloc(colors, GCHandleType.Pinned); IntPtr ptr = handle.AddrOfPinnedObject(); Marshal.Copy(ptr, bytes, 0, length); } finally { if (handle != default(GCHandle)) handle.Free(); } return bytes; }

Lo cual es lo suficientemente rápido para mis necesidades.