【问题标题】:Generate random color apart from black生成黑色以外的随机颜色
【发布时间】:2018-08-27 05:33:32
【问题描述】:

我在我的 Xamarin 项目中使用这种方法来生成随机颜色

Random random = new Random();
public string BoColor
{
    get
    {
        return String.Format("#{0:X6}", random.Next(0x808080) & 0x7E7E7E);
    }
}

但我希望生成没有黑色的颜色,在这方面将不胜感激。

提前感谢您的支持。

【问题讨论】:

  • 您想要随机颜色,但又不想包含黑色?
  • 只是为了澄清,您是否设计了生成黑色以外的颜色的方法,或者您是否设计了创建任何随机颜色并希望排除黑色事后的方法?
  • 对你来说什么才算黑色?它只是 纯黑色 还是 #010101 黑色足以成为黑色?如果是这样,那么我想知道阈值在哪里。
  • 是的,但如果它可以生成与黑色无关的颜色会更好(我的意思是颜色看起来很暗,例如像 #010101 这样的颜色),就像@Paul Kertscher 提到的那样

标签: c# xaml xamarin.forms xamarin.android


【解决方案1】:

要扩展@Gaurang Dave 所说的内容,您可以使用IsAlmostBlack(string color) 设置自己的阈值:

    private static string GenerateColor()
    {
        Random random = new Random();
        string color;
        do
        {
            color = $"#{random.Next(0x808080) & 0x7E7E7E:X6}";
        }
        while (IsAlmostBlack(color));

        return color;
    }

    private static bool IsAlmostBlack(string color)
    {
        // #XX0000
        int red = int.Parse(color.Substring(1, 2), NumberStyles.HexNumber);
        // #00XX00
        int green = int.Parse(color.Substring(3, 2), NumberStyles.HexNumber);
        // #0000XX
        int blue = int.Parse(color.Substring(5, 2), NumberStyles.HexNumber);

        // Checks if all values are under a certain value (here 50[decimal])
        return red < 0x32 && green < 0x32 && blue < 0x32;
    }

你当然也可以使用小数:

        // Checks if all values are under a certain value (here 50[decimal])
        return red < 50 && green < 50 && blue < 50;

【讨论】:

    【解决方案2】:

    有许多可能的方法来实现这一点。你可以开发这样的方法

    static string generateColor()
    {
        Random random = new Random();
        string color = string.Empty;
        do
        {
            color = string.Format("#{0:X6}", random.Next(0x808080) & 0x7E7E7E);
        }
        while (color == "#000000");
    
        return color;
    }
    

    【讨论】:

    • 感谢您的支持,我使用了上述方法,但它仍然生成与黑色相关的颜色,例如 #010101,这是我们可以生成没有非常暗颜色的颜色的方式,例如 #010101、#000000等
    • @PanWeerasekara 如果我更改random.Next(0x808080) &amp; 0x7E7E7E 这一行来生成浅色就可以了吗?
    • 我使用 random.Next(0x808080) & 0x7E7E7E 的原因只是为了生成深色(删除所有浅色)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2015-11-07
    • 2012-02-19
    • 2013-04-02
    • 2018-04-02
    相关资源
    最近更新 更多