【问题标题】:Generating a readable colour from RGB?从 RGB 生成可读的颜色?
【发布时间】:2026-02-11 12:50:02
【问题描述】:

我正在添加一个函数,该函数允许用户输入颜色(例如:紫色),并将其个人资料的外观更改为紫色。它从文本解释为“颜色”类,该类将它们作为 RGB 数字存储在自身内部(int 代表红色,一个代表绿色,另一个代表蓝色)。我不知道该怎么做是在逻辑上将这三个数字变成另一个 3,这将使颜色变得可读。

谁能帮我解决这个问题?

【问题讨论】:

标签: rgb colors


【解决方案1】:

如果我正确地解释了您的问题,那么您正在寻找在某人选择了背景主题颜色之后的可读文本颜色。这是在一个较旧的问题中回答的:

Good text foreground color for a given background color

【讨论】:

    【解决方案2】:

    显然,并不是所有可能的 RGB 组合都有名称!大概您想找到您为其指定名称的附近组合?

    因此,您真正需要的只是一种定义一个 RGB 与另一个 RGB 的“接近程度”的方法。为简单起见,我建议使用欧几里得距离平方,即 (R2-R1)^2 + (G2-G1)^2 + (B2-B1)^2。然后,您需要做的就是遍历所有“命名”颜色,并找到距离最短的颜色。

    【讨论】:

    • @Joe Simpson:哦,等等,“可读”是指“清晰”,如“我想在给定任意背景颜色的情况下生成清晰的前景色”?
    【解决方案3】:

    您可以查看 X11 附带的 rgb.txt 文件。

    一个解析器可以提供这些字符串之间的转换,并且 RGB 值不会很难构建,并且可能会满足您的需求。

    【讨论】:

    • 很抱歉,我的解析器已经可以为颜色提取许多名称和方法
    • @Joe 那么你的问题是什么?你能详细说明一下吗?
    • 我正在尝试将我已经解析的 RGB 值转换为可读的颜色
    【解决方案4】:

    正如其他人已经说过的那样,有 1670 万种可能的组合,显然所有这些组合都没有定义的名称。

    您不会详细介绍您的用例,但如果您想让最终用户友好,那么使用百分比怎么样?

    80% red, 50% green, 23% blue
    

    这对于非技术人员来说也是完全可以理解的。如果您使用整数百分比值,您将限制(从 256^3 到 100^3)可能性的数量,但不如将用户限制在固定的命名颜色调色板中。

    【讨论】:

    • 当 javascript 可用时,我将添加一个 javascript 颜色选择器