gpt4 book ai didi

.net - 从字符串生成独特的颜色

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:36 25 4
gpt4 key购买 nike

我必须在一些不透明 矩形区域中绘制一些任意字符串。我需要那些区域的背景颜色对于给定的字符串是唯一的。

比如说,如果我绘制“Paris”和“Paris1”,它们的颜色应该不同。但是如果我把“巴黎”画成蓝色,那么彼此的“巴黎”也应该画成蓝色。

我再次强调颜色应该是不透明的。

为此我找到了一个简单的解决方案:

rectangleBackColor = Color.FromArgb(myString.GetHashCode())

问题是不透明度。我需要“消除”“A”(alpha)成分。

现在,这样的代码可能会起作用

  rectangleBackColor = Color.FromArgb(myString.GetHashCode())
' set the alpha value = 255 for an opaque color '
rectangleBackColor = Color.FromArgb(255, rectangleBackColor)

但它会失去字符串颜色的唯一性。

比如说,我有两个不同的 hashCodes(十六进制)x AB 11 22 33x FF 11 22 33
AB 设置为 FF 我使两个不同的字符串具有相同的背景颜色 (x FF 11 22 33)。这可不好。

最佳答案

您不能为字符串生成唯一的颜色:

RGB 空间有 24 位或 2^24-1 个唯一值(总共 16777215 种颜色)。

以下代码将打印 16777220 个唯一字符串(比颜色数多 5):

for(int i=0; i<16777220 ; ++i) Console.WriteLine(i.ToString());

因此,如果您获取上述程序生成的所有字符串并给出颜色,则您必须至少有 5 个字符串具有重复的颜色。

顺便说一句,GetHashCode返回的不是唯一值,只是均匀分布,用32位重复上面的证明(你需要在for循环中做i uint,把数字改成4294967295以上,但那些是仅更改)并且您发现无法为 32 位值(或任何其他固定大小值)中的每个字符串获取唯一值。

你的方法很好,重复的颜色可能很少见。

关于.net - 从字符串生成独特的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6594672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com