我需要生成随机颜色名称,例如“红色”,“白色”等我该怎么办?我可以像这样生成随机颜色:
Random randonGen = new Random();
Color randomColor = Color.FromArgb(randonGen.Next(255), randonGen.Next(255),
randonGen.Next(255));
但是我需要名字,而不是像这样生成的所有颜色都有一个已知名称。
由于
答案 0 :(得分:81)
使用Enum.GetValue
检索KnownColor
枚举的值并获取随机值:
Random randomGen = new Random();
KnownColor[] names = (KnownColor[]) Enum.GetValues(typeof(KnownColor));
KnownColor randomColorName = names[randomGen.Next(names.Length)];
Color randomColor = Color.FromKnownColor(randomColorName);
答案 1 :(得分:11)
取一个随机值并从KnownColor枚举中获取。
可能就是这样:
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.
答案 2 :(得分:6)
忽略你在颜色之后的事实 - 你真的只想要一个可能的值列表,然后从该列表中取一个随机值。
唯一棘手的问题是找出你想要的颜色集。正如Pih所提到的,有KnownColor
- 或者您可以在Color
结构中找到Color
类型的所有公共静态属性,并获取它们的名称。这取决于你想要做什么。
请注意,随机性本身可能有点尴尬 - 如果您选择多种随机颜色,您可能想要使用单个Random`实例。不幸的是,它不是线程安全的,这使得事情可能更加复杂。有关详细信息,请参阅我的article on randomness。
答案 3 :(得分:5)
听起来你只需要KnownColor枚举中的随机颜色。
答案 4 :(得分:2)
将颜色放入数组中,然后选择随机索引:
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)];
}
}
请注意,上面的示例只是查找Color
类型的所有静态属性。您可能希望通过检查属性的实际返回类型是Color
来改进这一点。
答案 5 :(得分:2)
来自Retrieve a list of colors in C#
的代码<强> CODE:强>
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;
}
答案 6 :(得分:2)
或者你可以试试这个:对于.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;
}
答案 7 :(得分:1)
我会构建一个查找表。特别是因为某些颜色是个人解释。
浏览Color结构中的每个颜色值(http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx)并将其映射到RGB值。然后转换回来,查找RGB值以查看它是否具有命名颜色。
答案 8 :(得分:0)
没有办法随机化一个枚举,你想要做的,最合适的解决方案是通过设置一个包含颜色的所有值的List,然后获得一个整数随机化并将其用作索引列表。
答案 9 :(得分:0)
private string getRandColor()
{
Random rnd = new Random();
string hexOutput = String.Format("{0:X}", rnd.Next(0, 0xFFFFFF));
while (hexOutput.Length < 6)
hexOutput = "0" + hexOutput;
return "#" + hexOutput;
}
答案 10 :(得分:0)
在这里,我根据完成的个人资料生成颜色。
public string generateColour(Decimal percentProfileComplete )
{
if(percent < 50)
{
return "#" + (0xff0000 | Convert.ToInt32(Convert.ToDouble(percentProfileComplete ) * 5.1) * 256).ToString("X6");
}
return "#" + (0xff00 | (255 - Convert.ToInt32((Convert.ToDouble(percentProfileComplete ) - 50) * 5.1)) * 256 * 256).ToString("X6");
}
答案 11 :(得分:0)
我会对Pih的回答发表评论;然而,没有足够的业力。 Anywho,我尝试实现这个并遇到了由多个调用生成的相同颜色的问题,因为代码被快速连续地重复调用(即randomGen是相同的,因为它基于时钟=随后的相同结果)。
请改为尝试:
public class cExample
{
...
Random randomGen = new Random();
KnownColor[] names = (KnownColor[]) Enum.GetValues(typeof(KnownColor));
...
private Color get_random_color()
{
KnownColor randomColorName = names[randomGen.Next(names.Length)];
return Color.FromKnownColor(randomColorName);
}
...
}
答案 12 :(得分:0)
要清除原始问题中的语法错误,请
Color.FromRgb和
(字节)random2.Next(255)
将整数转换为Color:
所需的字节值 Random random2 = new Random();
public int nn = 0x128;
public int ff = 0x512;
Color randomColor = Color.FromRgb((Byte)random2.Next(nn, ff), (Byte)random2.Next(nn, ff), (Byte)random2.Next(nn, ff));
答案 13 :(得分:0)
如果您想从特定颜色列表中获得随机颜色,
然后尝试下面的一个
Color[] colors = new[] { Color.Red, Color.Blue, Color.FromArgb(128, 128, 255) }; //Add your favorite colors list
Random randonGen = new Random();
Color randomColor = colors[Generator.Next(0, colors.Length)]; //It will choose random color from "colors" array
答案 14 :(得分:-1)
生成一个随机数并将其强制转换为KnownColor Type
((KnownColor)Random.Next());