【问题标题】:how to generate random and solid colours using c#如何使用 C# 生成随机和纯色
【发布时间】:2013-10-31 13:13:34
【问题描述】:

我正在编写一个asp.net 应用程序,我必须完成以下两项任务:

  1. 根据用户输入“n”生成“n”个随机颜色(n 是用户想要生成的颜色数)。

  2. 所有生成的颜色都应该是纯色。

注意:我应该只生成纯色,因为当我在另一种颜色(color_old)之上覆盖一种颜色(color_new)时,被覆盖的颜色(color_old)应该不再可见。

我做了什么:

我在C#(文件后面的代码)中编写了以下代码,用于生成随机颜色,并且工作正常。

 private Color GenerateNewColor()
 {
     var values = Guid.NewGuid().ToByteArray().Select(b => (int)b);
     int red = values.Take(5).Sum() % 255;
     int green = values.Skip(5).Take(5).Sum() % 255;
     int blue = values.Skip(10).Take(5).Sum() % 255;

     return Color.FromArgb(255,red, green, blue);
 }

现在我的问题是“我应该如何确保上述函数生成的颜色是纯色?”

提前致谢。

【问题讨论】:

  • 纯色是什么意思?
  • 固体是指没有透明度吗?
  • 您将 alpha 设置为 255,因此它们是纯色。
  • 您采用了一种有趣的方式来生成随机值顺便说一句。不知道我是喜欢还是讨厌:)
  • 关于你的“随机性”,有什么理由特别是根据 GUID 的字节值模数生成它们而不使用Random.Next(256)?编辑:另外,您是否打算引入一种方法来处理避免随机选择重复颜色(尽管这种情况可能很罕见)或确保最小程度的变化(这样您就不会从黑色变为非常非常非常深灰色)所以它不会被用户感知为相同的颜色?

标签: c# asp.net colors


【解决方案1】:

除非您对“纯色”有一个奇怪的定义,否则FromArgb 生成的任何 Alpha 通道为 255 的颜色都是纯色。

【讨论】:

  • 感谢 Medinoc,从链接 en.wikipedia.org/wiki/RGBA_color_space 我了解到 FromArgb() 函数的第一个参数指定从 0% 到 100% 的透明度。如果值为 255,则为 100%,因此为纯色 :) 谢谢
猜你喜欢
  • 2013-02-26
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 2016-02-20
  • 2016-08-08
  • 2023-01-05
  • 2011-11-07
相关资源
最近更新 更多