当前位置: 首页 > 知识库问答 >
问题:

从Guid生成颜色

潘安平
2023-03-14

我的数据库中有各种对象,由唯一的System.Guid标识。当我显示它们时,我希望它们中的每一个都有基于其 guid 的独特颜色。

所以我想要这样的东西:

public Color ColorFromGuid(Guid guid) { /* ?? */ }

哪里

ColorFromGuid(databaseObject1.Guid) == ColorFromGuid(databaseObject1.Guid)
ColorFromGuid(databaseObject2.Guid) == ColorFromGuid(databaseObject2.Guid)
ColorFromGuid(databaseObject1.Guid) != ColorFromGuid(databaseObject2.Guid)

最好的方法是什么?

显然,唯一的guid比颜色多得多,所以不可能每个guid都有自己唯一的颜色。我只是想找一个好的品种。

共有3个答案

薛弘壮
2023-03-14

如果你用一个函数来做到这一点,你会失望的。

guid比颜色多很多倍,因此许多guid将映射到相同的颜色。很多时候,更多的Guids会映射到太接近而无法区分的颜色(例如#FFFF9999和#FFFF9998)。事实上,你只能分辨出少数几种颜色之间的区别,比如说最多50种。

指导不是随机的。只要对自己重复一遍:Guids不是随机的。特别是如果您使用的是数据库生成的 Guid,这可能是所谓的“顺序唯一标识符”,其中 Guid 的前半部分是相同的。这是否意味着你最终会为你的每个Guids得到不同深浅的粉红色?也许。

因此,除非您知道Guids的分布,并且能够创建一个将该分布映射到合适颜色分布的函数,否则您不会对函数生成的颜色感到满意。

以可扩展的方式执行此操作的最简单方法是在html" target="_blank">数据库中创建一个包含两列的简单表-颜色(名称,十六进制代码或RGB值)和Guid。这样做最耗时的部分是选择颜色。这允许您更改特定项目的颜色,如果它与另一种颜色太相似。没有技巧,只是简单的映射。

孙清野
2023-03-14

像这样的事情怎么样:

public Color ColorFromGuid(Guid guid)
{
    var values = guid.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;

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

这可能不太理想,但每个GUID都有一种颜色,而且每次使用相同的GUID都会产生相同的颜色。

徐瑞
2023-03-14

你可以做:

return Color.FromArgb(guid.GetHashCode());

如果需要不透明的颜色,请使用<code>color的重载。FromArgb,用于指定alpha。如果您希望类似的Guid生成非常不同的颜色,您可以对Guid执行不同类型的哈希,例如MD5哈希,并从中获取生成颜色的数字。

 类似资料:
  • 问题内容: 我正在开发一个Web服务,它需要传递一个新值作为对该服务内方法的引用。 我不熟悉或,但是需要类似的东西(因此创建一个新对象,据我了解返回)。 有任何想法吗? 问题答案: 您可以尝试以下方法: 资源 -

  • 我有生成SHA-1哈希的代码: 有没有办法将< code>hash转换成Guid(我猜是type 5,以便与SHA-1保持一致)?

  • 我需要找到一种更好的方法来从给定的自定义颜色生成阴影颜色用于主题目的。到目前为止,我找到了一种通过降低给定颜色的不透明度来做到这一点的方法,如下所示。所以我可以强调颜色颜色和给定颜色的褪色颜色到这个函数。 但由于我降低了颜色的不透明度,所以当使用时,它会显示小部件下面的内容。 是否有任何方法可以获得颜色的褪色值?

  • 问题内容: 我刚刚将一堆数据导入到MySQL表中,并且有一列“ GUID”,我希望基本上用新的和唯一的随机GUID填充所有现有行。 如何在MySQL中做到这一点? 我试过了 并且让每个领域都一样 问题答案: 我不确定这是否是最简单的方法,但是可以。这个想法是创建一个可以为您完成所有工作的触发器,然后执行查询以更新您的表,最后删除该触发器: 然后执行 和; UPDATE 另一个不使用触发器,但需要主

  • 问题内容: 鉴于此功能,我想更换 颜色 与颜色随机发生器。 我该怎么做? 问题答案: 使用代替:

  • 本文向大家介绍详解php中生成标准uuid(guid)的方法,包括了详解php中生成标准uuid(guid)的方法的使用技巧和注意事项,需要的朋友参考一下 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。 通常平台 会提供生成UUID的API。UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。 由以 下几部