计算任意字符串的十六进制颜色代码

时间:2010-03-17 18:15:24

标签: java colors hex

标题

有没有办法将任意字符串映射到HEX COLOR代码。我尝试使用字符串哈希码计算字符串的十六进制数。现在我需要将这个十六进制数转换为六位数,这些数字是HEX颜色代码范围。有什么建议吗?

String [] programs = {"XYZ", "TEST1", "TEST2", "TEST3", "SDFSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS"};

for(int i = 0; i < programs.length; i++) {
  System.out.println( programs[i] + " -- " + Integer.toHexString(programs[i].hashCode()));
}

4 个答案:

答案 0 :(得分:10)

如果你真的不关心颜色的“含义”,你可以将int的位分开(删除第一个只用于RGB而不是ARGB)

String [] programs = {"XYZ", "TEST1", "TEST2", "TEST3", "SDFSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS"};

for(int i = 0; i < programs.length; i++) {
  System.out.println( programs[i] + " -- " + intToARGB(programs[i].hashCode()));
}
....
public static String intToARGB(int i){
    return Integer.toHexString(((i>>24)&0xFF))+
        Integer.toHexString(((i>>16)&0xFF))+
        Integer.toHexString(((i>>8)&0xFF))+
        Integer.toHexString((i&0xFF));
}

答案 1 :(得分:2)

hashcode0x00FFFFFF

的关联怎么样?

答案 2 :(得分:1)

我在寻找红宝石解决方案时遇到了这个问题,所以我想我会为ruby添加一个答案,以防有人遵循我所做的相同路径。我最终使用了以下方法,该方法使用ruby字符串的hash方法和Fixnum.to_s的可选基本指定参数从字符串创建相同的六位十六进制代码。它从1而不是0切片以跳过负号。

def color_from_string query
  return '#'+query.hash.to_s(16).slice(1,6)
end

答案 3 :(得分:0)

万一其他人正在寻找Flutter / Dart的解决方案:

    Color _fromInt(int i) {
      final a = (i >> 24) & 0xFF;
      final r = (i >> 16) & 0xFF;
      final g = (i >> 8) & 0xFF;
      final b = i & 0xFF;
      return Color.fromARGB(a, r, g, b);
    }

值得注意的是某些背景颜色,例如黑色,可能很难区分颜色。

为此,我将Alpha通道设置为最大值255:

    Color _fromInt(int i) {
      const a = 255;
      final r = (i >> 16) & 0xFF;
      final g = (i >> 8) & 0xFF;
      final b = i & 0xFF;
      return Color.fromARGB(a, r, g, b);
    }