¿El número de elementos posibles tiene un límite bajo razonable? Una solución rápida y fácil es simplemente almacenar una matriz de valores de color utilizando la ID del artículo. Eso supone que tienes una cantidad relativamente baja de colores, y estás seguro de que no superarás una cierta cantidad de elementos, sin embargo.
Si desea generar colores en lugar de utilizar una lista, un truco para hacer que tengan un aspecto consistente y decente es generarlos utilizando HSB. Predefina un brillo y saturación, luego base el valor de tono fuera de alguna función de la ID (esto puede ser una variedad de cosas dependiendo de cuántos identificadores planee tener, pero multiplicando la ID por cierta cantidad (y modding cuando exceda) 255!) Es un buen enfoque aproximado. Con este enfoque, todos los colores se "alinearán" en términos de saturación y brillo, pero cada uno tendrá un color distinto.
Estoy un poco aburrido en el trabajo, así que batida juntos una solución rápida:.
class HsbColor
{
public int Hue { get; set; }
public int Saturation { get; set; }
public int Brightness { get; set; }
public Color ToRGB
{
// left as exercise to the reader...
}
}
public class Item
{
public int Id { get; set; }
private static const byte EXPECTED_MAX = 15;
private static int HUE_FACTOR = 255/EXPECTED_MAX;
public HsbColor Color
{
get {
var color = new HsbColor() { Saturation = 175, Brightness = 175 };
color.Hue = (Id * HUE_FACTOR) % 255;
return color;
}
}
}
Véase mi respuesta para una forma de evitar la predicción de la EXPECTED_MAX y aún así obtener una distribución uniforme. –