【问题标题】:Converting double rgba color values to character of hex将双 rgba 颜色值转换为十六进制字符
【发布时间】:2013-12-03 12:09:26
【问题描述】:

我有一个带有 rgba 颜色值的双精度数组。像这样:

double* colorVals = new double[4];
colorVals[0] = 0; 
colorVals[1] = 129;
colorVals[2] = 255;
colorVals[3] = .4;

我想将其转换为包含以下内容的十六进制字符串:“#0081FF”

我将如何进行这种转换?

【问题讨论】:

    标签: c++ colors rgb hex rgba


    【解决方案1】:

    如果您知道值在范围内,则可以使用以下代码:

    #include <string>
    #include <cstring>
    
    std::string rgbstr(const double *rgb) {
      char tmp[8];
    
      std::snprintf(tmp, sizeof(tmp), "#%02x%02x%02x", int(rgb[0]), int(rgb[1]), int(rgb[2]));
      return std::string(tmp);
    }
    

    【讨论】:

    • 这很好用!但是,不应该对 alpha 值进行编码吗?
    • “与 RGB 值不同,RGBA 值没有十六进制表示法。”,CSS3 规范说,问题中的示例只有 6 位数字。所以我认为这没问题。
    【解决方案2】:

    您必须将每个双精度转换为两个字符的十六进制,然后将它们全部连接成一个字符串 注意:请参阅this 了解如何将双精度转换为十六进制

    【讨论】:

    • 该链接具有误导性。颜色的十六进制表示法表示 RGB(A) 整数值,而不是双精度的原始字节值。
    猜你喜欢
    • 2012-05-14
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2017-02-13
    • 2012-11-24
    相关资源
    最近更新 更多