Il numero di elementi possibili ha un limite inferiore ragionevole? Una soluzione semplice e veloce consiste nel memorizzare una serie di valori di colore usando l'ID dell'articolo. Ciò presuppone che tu abbia una quantità relativamente bassa di colori, e sei certo che non andrai oltre un certo numero di articoli, comunque.
Se si desidera generare colori anziché utilizzare un elenco, un trucco per far sì che abbiano un aspetto coerente e dignitoso è di generarli utilizzando HSB. Pre-definire una luminosità e una saturazione, quindi basare il valore della tonalità su alcune funzioni dell'ID (può essere una varietà di cose a seconda del numero di ID che si prevede di avere, ma moltiplicando l'ID di una certa quantità (e modificando quando supera 255!) È un buon approccio approssimativo: con questo approccio i colori saranno tutti "allineati" in termini di saturazione e luminosità ma ognuno avrà un colore distinto
Sono un po 'annoiato al lavoro, quindi montata insieme una soluzione veloce:.
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;
}
}
}
fonte
2009-07-22 21:14:09
Vedere la mia risposta di un modo per evitare di predire l'EXPECTED_MAX e ancora ottenere una distribuzione uniforme. –