48 Stimmen

Wie erstelle ich einen zufälligen Hexadezimalstring, der eine Farbe darstellt?

Ich generiere einige Diagramme, die einen Hexadezimalwert für die Farben benötigen.

Beispiel:

Ich erstelle diese dynamisch, daher möchte ich den Hexadezimalcode für jede dataseries zufällig generieren.

Was ist der beste Weg, dies zu tun?

0 Stimmen

Ich habe gerade bemerkt, dass mein Beispiel nicht angezeigt wurde. Ich vermute, dass dies daran liegt, dass es sich um eine XML-Zeichenfolge handelte... Na ja, es war nicht wichtig, da die Antwort gut funktioniert hat.

1 Stimmen

@rahkim - Frage aktualisiert, um das zu beheben, und einen aussagekräftigeren Titel hinzugefügt

154voto

Samuel Punkte 36701

Der einfachste Weg ist die Verwendung von String.Format und die Verwendung des hexadezimalen Formats für das Argument.

var random = new Random();
var color = String.Format("#{0:X6}", random.Next(0x1000000)); // = "#A197B9"

21voto

John Rasch Punkte 60054

Samuels Antwort ist der beste Weg, dies zu tun, stellen Sie einfach sicher, dass, wenn Sie die Farben innerhalb einer Schleife generieren, Sie nicht jedes Mal ein neues Random-Objekt instanziieren, weil new Random() den Generator mit der Systemuhr initialisiert. Ihre Schleife wird schneller laufen als die Uhr ticken kann, daher werden Sie immer wieder dieselben Farben generieren, weil random mit dem gleichen Wert initialisiert wird.

Es sollte ungefähr so aussehen:

int numColors = 10;
var colors = new List();
var random = new Random(); // Stellen Sie sicher, dass dies außerhalb der Schleife steht!
for (int i = 0; i < numColors; i++) 
{
    colors.Add(String.Format("#{0:X6}", random.Next(0x1000000)));
}

anstatt:

int numColors = 10;
var colors = new List();
for (int i = 0; i < numColors; i++) 
{
    var random = new Random(); // Setzen Sie dies nicht hierhin!
    colors.Add(String.Format("#{0:X6}", random.Next(0x1000000)));
}

19voto

Canton Punkte 797

Nur zufällige Farben sind meiner Meinung nach möglicherweise nicht bevorzugt, da man Farben benötigt, die für das menschliche Auge unterscheidbar sind.

Wie wäre es, wenn man eine bestimmte Anzahl von Farben festlegt und diese dann zufällig auswählt?

Vielleicht findest du bessere Antworten in einigen Open-Source-Diagrammbibliotheken.

14voto

Greg Punkte 2133

Ein guter Weg, um eine schöne Farbpalette zu generieren, besteht darin, sie mit fester Sättigung und Helligkeit zu definieren und den Farbton zu variieren.

  1. Setzen Sie die Sättigung und Helligkeit auf einen Wert, den Sie mögen, z.B. 50 % Sättigung und 90 % Helligkeit.
  2. Teilen Sie nun die 360 Grad des Farbtons durch die Anzahl der gewünschten verschiedenen Farben.
  3. Wählen Sie Farben aus HSV mit diesem Intervall für den Farbton und der festen Sättigung und Helligkeit.

Dies ergibt eine schöne Farbpalette, die alle so aussehen, als kämen sie aus demselben "Set" - alle Pastellfarben, alle intensiv, alle gebrochenes Weiß, was auch immer. Und es ist ziemlich einfach zu codieren, wenn Sie Color.FromHSV() haben.

Es hört wahrscheinlich auf zu funktionieren, wenn Sie zu viele Farben haben, sie werden ununterscheidbar sein. Aber wahrscheinlich haben Sie dieses Problem sowieso.

In Pseudocode:

Sat = 0.5 * 255 //wenn wir den Bereich 0-255 wollen...
Helligkeit = 0.9 * 255
AnzahlDerFarben = 7
HueAbstand = 360 / 7
Farben = []
für (i = 0; i < AnzahlDerFarben; i++)
Farben.Add(Color.FromHSV(HueAbstand * i, Sat, Helligkeit)

oder

n = 7
Farben = [Color.FromHSV(x*360/n, 128, 230) for x in range(n)]

(Ich mag List Comprehensions...)

5voto

Chris Doggett Punkte 18701
Zufall rand = new Zufall(); // geben Sie einen Startwert an
int r = rand.Next(0x1000000); 
Console.WriteLine("#{0:X6}", r);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X