Domanda Come generare nomi di colori casuali in C #


Devo generare nomi di colori casuali, ad es. "Rosso", "Bianco" ecc. Come posso farlo? Sono in grado di generare un colore casuale come questo:

Random randonGen = new Random();
Color randomColor = Color.FromArgb(randonGen.Next(255), randonGen.Next(255), 
randonGen.Next(255));

ma ho bisogno dei nomi e non tutti i colori generati in questo modo hanno un nome conosciuto.

Grazie


44
2018-04-27 14:31


origine


risposte:


Uso Enum.GetValue recuperare i valori del KnownColor enumerazione e ottieni un valore casuale:

Random randomGen = new Random();
KnownColor[] names = (KnownColor[]) Enum.GetValues(typeof(KnownColor));
KnownColor randomColorName = names[randomGen.Next(names.Length)];
Color randomColor = Color.FromKnownColor(randomColorName);

78
2018-04-27 14:36



Prendi un valore casuale e ottieni da KnownColor enum.

Può essere così:

System.Array colorsArray = Enum.GetValues(typeof(KnownColor));
KnownColor[] allColors = new KnownColor[colorsArray.Length];

Array.Copy(colorsArray, allColors, colorsArray.Length);
// get a randon position from the allColors and print its name.

11
2018-04-27 14:34



Ignora il fatto che cerchi i colori: vuoi solo un elenco di valori possibili e poi prendere un valore casuale da quella lista.

L'unica cosa difficile è capire quale set di colori cerchi. Come ha detto Pih, c'è KnownColor - oppure potresti scoprire tutte le proprietà statiche pubbliche di tipo Color all'interno del Color struttura, e ottenere i loro nomi. Dipende da cosa stai cercando di fare.

Nota che la casualità in sé può essere un po 'imbarazzante: se stai selezionando più colori casuali, probabilmente vorrai usare una singola istanza di Random`. Sfortunatamente non è thread-safe, il che rende le cose potenzialmente ancora più complicate. Guarda il mio articolo sulla casualità per maggiori informazioni.


6
2018-04-27 14:36



Sembra che tu abbia solo bisogno di un colore casuale dal KnownColor enumerazione.


5
2018-04-27 14:35



Codice copiato da Recupera un elenco di colori in C #

CODICE:

private List<string> GetColors()
{
    //create a generic list of strings
    List<string> colors = new List<string>();
    //get the color names from the Known color enum
    string[] colorNames = Enum.GetNames(typeof(KnownColor));
    //iterate thru each string in the colorNames array
    foreach (string colorName in colorNames)
    {
        //cast the colorName into a KnownColor
        KnownColor knownColor = (KnownColor)Enum.Parse(typeof(KnownColor), colorName);
        //check if the knownColor variable is a System color
        if (knownColor > KnownColor.Transparent)
        {
            //add it to our list
            colors.Add(colorName);
        }
    }
    //return the color list
    return colors;
}

2
2018-04-27 14:47



Metti i colori in una matrice e poi scegli un indice casuale:

class RandomColorSelector
{
    static readonly Color[] Colors = 
        typeof(Color).GetProperties(BindingFlags.Public | BindingFlags.Static)
       .Select(propInfo => propInfo.GetValue(null, null))
       .Cast<Color>()
       .ToArray();

    static readonly string[] ColorNames =  
        typeof(Color).GetProperties(BindingFlags.Public | BindingFlags.Static)
        .Select(propInfo => propInfo.Name)
        .ToArray();

    private Random rand = new Random();

    static void Main(string[] args)
    {
        var colorSelector = new RandomColorSelector();
        var color = colorSelector.GetRandomColor();

        // in case you are only after the *name*
        var colorName = colorSelector.GetRandomColorName();            
    }

    public Color GetRandomColor()
    {
        return Colors[rand.Next(0, Colors.Length)];
    }

    public string GetRandomColorName()
    {
        return ColorNames[rand.Next(0, Colors.Length)];
    }
}

Si noti che l'esempio sopra mostra semplicemente tutte le proprietà statiche di Color genere. Potresti voler migliorare questo verificando che il tipo di ritorno effettivo della proprietà sia a Color.


2
2018-04-27 14:35



O potresti provare questo: per .NET 4.5

public Windows.UI.Color GetRandomColor()
{
            Random randonGen = new Random();
            Windows.UI.Color randomColor = 
                Windows.UI.Color.FromArgb(
                (byte)randonGen.Next(255), 
                (byte)randonGen.Next(255),
                (byte)randonGen.Next(255), 
                (byte)randonGen.Next(255));
            return randomColor;
}

2
2017-08-04 05:57



Vorrei costruire una tabella di ricerca. Soprattutto perché alcuni colori sono all'altezza dell'interpretazione personale.

Passare attraverso ogni valore di colore nella struttura Color ( http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx ) e mapparlo ai valori RGB. Quindi per riconvertire, cercare il valore RGB per vedere se ha un colore con nome.


1
2018-04-27 14:35



Non c'è modo di Randomizzare un'Enumerazione, come si vuole fare, la soluzione più adatta passerebbe impostando una Lista con tutti i valori dei colori, quindi ottenere un intero che la randomizza e usarla come indice della lista.


0
2018-04-27 14:36