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

Java 计算任意字符串的十六进制颜色代码 标题,java,ruby,colors,hex,Java,Ruby,Colors,Hex,有没有办法将任意字符串映射到十六进制颜色代码。我尝试使用字符串哈希代码计算字符串的十六进制数。现在我需要把这个十六进制数转换成六位数,它们在十六进制色码范围内。有什么建议吗 String [] programs = {"XYZ", "TEST1", "TEST2", "TEST3", "SDFSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS"}; for(int i = 0; i < programs.length; i++) { System.out.

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

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()));
}
String[]程序={“XYZ”、“TEST1”、“TEST2”、“TEST3”、“sdfsssssss”};
for(int i=0;i
hashcode
0x00FFFFFF
进行anding如何如果您不真正关心颜色的“含义”,您可以只分割int的位(删除第一个用于RGB而不是ARGB)

String[]程序={“XYZ”、“TEST1”、“TEST2”、“TEST3”、“sdfsssssss”};
for(int i=0;i>24)和0xFF))+
整数.toHexString((i>>16)和0xFF))+
整数.toHexString((i>>8)和0xFF))+
toHexString((i&0xFF));
}

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

def color\u from\u字符串(查询)
“#”+query.hash.to_s(16).slice(1,6)
结束

如果其他人正在寻找颤振/飞镖的解决方案:

    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);
    }

任何六位数的十六进制代码都不是有效的RGB颜色吗?我想这是真的,每个RGB颜色分量的范围是0-256。任何两个十六进制数字加在一起都将产生最多256个数字。C#
私有字符串StringToARGB(字符串文本){int i=text.GetHashCode();返回“#”+((i>>24)和0xFF)).ToString(“X2”)+((i>>16)和0xFF)).ToString(“X2”)+((i>>8)和0xFF)).ToString(“X2”)+((i&0xFF)).ToString(“X2”);}
您可以创建这样的颜色对象:
Color Color=(Color)(new ColorConverter()).ConvertFromString(this.StringToARGB(source))
    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);
    }