Xamarin.Forms C # encuentra el color dominante de la image o la image byte array

Estoy usando Xamarin.Forms para desarrollar una aplicación multiplataforma. ¿Cuál es el mejor enfoque para usar c # con Xamarin para encontrar el color dominante de una image? Encontré un enfoque de ios: https://github.com/mxcl/UIImageAverageColor/blob/master/UIImage%2BAverageColor.m pero no puedo convertirlo al equivalente de c #. ¿Qué es un buen método? Para mi implementación ios puedo usar una matriz UIImage o un byte [].

¡Gracias por la ayuda!

Puedes probar esto (pero obtienes un object Bitmap , espero que pueda ayudarte):

 public static Color getDominantColor(Bitmap bmp) { //Used for tally int networking = 0; int green = 0; int blue = 0; int acc = 0; for (int x = 0; x < bmp.Width; x++) { for (int y = 0; y < bmp.Height; y++) { Color tmpColor = bmp.GetPixel(x, y); networking += tmpColor.R; green += tmpColor.G; blue += tmpColor.B; acc++; } } //Calculate average networking /= acc; green /= acc; blue /= acc; return Color.FromArgb(networking, green, blue); } 

No te olvides de Using :

 using System; using System.Collections.Generic; using System.Text; using System.Drawing; 

Editar:

No pude encontrar la solución exacta para su representación de imágenes de Byte[] , pero encontré esto:

 public static byte[] ImageToByteArray(Image image) { ImageConverter myConverter = new ImageConverter(); return (byte[])myConverter.ConvertTo(image typeof(byte[])); } 

El código anterior, como puede ver, convierte de Image a Byte[] .

¡Aclamaciones!

Esto parece estar funcionando. Necesito ejecutar algunas testings para verificar cuán efectivo y rápido es, pero en caso de que alguien más quiera algo similar:

 public static UIColor averageColor(UIImage image) { CGColorSpace colorSpace = CGColorSpace.CreateDeviceRGB (); byte[] rgba = new byte[4]; CGBitmapContext context = new CGBitmapContext (rgba, 1, 1, 8, 4, colorSpace, CGImageAlphaInfo.PremultipliedLast); context.DrawImage(new RectangleF(0, 0, 1, 1), image.CGImage); if(rgba[3] > 0) { var alpha = ((float)rgba[3])/255.0; var multiplier = alpha/255.0; var color = new UIColor ( (float)(rgba [0] * multiplier), (float)(rgba [1] * multiplier), (float)(rgba [2] * multiplier), (float)(alpha) ); return color; } else { var color = new UIColor ( (float)(rgba [0] / 255.0), (float)(rgba [1] / 255.0), (float)(rgba [2] / 255.0), (float)(rgba [3] / 255.0) ); return color; } }