【问题标题】:Convert negative color numbers to HEX or RGB将负色数转换为 HEX 或 RGB
【发布时间】:2017-07-26 19:03:29
【问题描述】:

我从未见过-1-16777216-256 等颜色代码。所以我目前的问题是:

我们有一个第三方软件,您可以在其中对值进行颜色编码,如下图所示。

现在我正在创建一个显示这些值的 PHP 报告,但我还想使用与软件中定义的颜色相同的颜色来显示它们。我能够从数据库中找到这些值,但我很困惑,因为这些值的格式或符号我不熟悉。

您能帮我将这些值转换为我习惯使用的 Oracle 或 PHP 中的 HEX 或 RGB(我将使用它作为报告的 CSS)。

编辑

查看数据库和软件中的颜色,我至少可以匹配这样的数字:

-1 = 白色

-12582784 = 紫色

-65408 = 粉色

-16777216 = 黑色

-256 = 黄色

附加编辑

所以看起来 16777216 是一个完美的立方数。它的立方根是 256(在 RGB 上,每种原色都可以用 0-255 的数字表示)。到目前为止,这是我能想到的唯一关系。我仍然不知道如何将其转换为 HEX 或 RGB。


我已经做了一些研究,虽然没有真正的成果。但我会把它包括在内,所以我看起来不像我没有尝试过 - 如果你对它不感兴趣,那就忽略它吧:

16777216 - 我从搜索实际代码 -16777216 开始,但没有返回任何内容,因此我删除了负号。

Facts about 16777216 - 该页面显示了一些公式,但我没有看到任何转换为​​ HEX 或 RGB 的公式。

【问题讨论】:

  • 对于颜色代码部分,这里有答案:stackoverflow.com/questions/12903820/…
  • 感谢@haslam,这似乎与我所经历的完美匹配。我现在要试着理解它。
  • 唯一想到的是有符号整数和无符号整数之间的转换。我了解这些负数当前存储在表格中;你知道它们是如何产生的吗?
  • @mathguy 不,我没有。第三方软件是 .NET 应用程序,所以我猜测使用 C# 方法?
  • 如果我必须手动执行此操作,只是为了测试无意转换为有符号整数的假设:将 256^3 添加到负数并将结果“写入”基数 256。“数字”是(或应该是)RGB 代码。显然这适用于黑色(添加 256^3 结果为 0,黑色的正确代码),显然这适用于黄色(值 255、255、0)。而对于白色(你会得到 255、255、255)。

标签: php css sql oracle colors


【解决方案1】:

您的颜色确实是以稍微扭曲的方式存储的 RGB 值。 您所要做的就是将十进制数从 16777216 中取出并转换为 HEX。

16777216-1 = 16777215(FFFFFFh = 白色)

16777216-12582784 = 4194432(400080h = 紫色)

16777216-65408 = 16711808(FF0080h = 粉色)

16777216-16777216 = 0(000000h = 黑色)

16777216-256 = 16776960(FFFF00h = 黄色)

我希望这会有所帮助。 很抱歉没有写代码,但我恐怕我的学习还没有完成。我保证当我到达那里时我会努力的。 :)

【讨论】:

  • 感谢您提供有趣的解决方案。我明天看看这个。
  • @uom-pgregorio - 只要确保您意识到这与我在评论中的建议相同。
  • 所以我想看看这个是否有效,但我想知道你如何将16776960 转换为FFFF00
  • 对不起,我问得太快了——使用 PHP 的 dechex 我能够转换这些数字。谢谢你,也谢谢你@mathguy!
【解决方案2】:

我在 PHP 中创建了这个函数thanks to this note

function toColor($n) {
    return ("#".substr("000000".dechex($n),-6));
}

它将带符号的 int 转换为十六进制,看起来颜色匹配。在一个单独的任务中,我想降低 alpha 通道,因为颜色非常强烈,但我会留到另一天。

【讨论】:

    【解决方案3】:

    我建议使用 PHP 将 BACK_COLOR(即“编码颜色参考 id”)拉入每个表格单元格。出于 CSS 原因,在该负数前面加上一个字符。包括指定每个动态类的颜色的 CSS。

    <style>
    .g-1 { color: #000; background: #ffffff /* white */ } 
    .g-12582784 { color: #fff; background: #3F0180 /* purple */ } 
    .g-65408 { color: #fff; background:  #FF0080 /* pink */ } 
    .g-256 background: { color: #000; #FFFD05 /* yellow */ }
    .g-16777216 { color: #fff; background: #000000 /* black */ }
    </style>
    
    <table>
    <tr>
    <td class="g-12582784">Option 1</span> <!-- use PHP to generate this class -->
    <td class="g-65408">Option 2</span> <!-- use PHP to generate this class -->
    <td class="g-256">Option 3</span> <!-- use PHP to generate this class -->
    </tr>
    </table>
    

    【讨论】:

    • 我想避免对颜色进行硬编码,因为用户以后可能会决定更改它们。
    • 使用 PHP 动态拉入颜色代码。你做了那个可怕的 dechex 函数——用它来编写 css 颜色十六进制。
    • 这显然是可能的 - 看看我在几分钟前发现的我发布的答案。似乎工作。
    猜你喜欢
    • 1970-01-01
    • 2019-02-08
    • 2013-11-12
    • 2012-02-06
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多