有没有办法将任意字符串映射到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()));
}
答案 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)
hashcode
与0x00FFFFFF
答案 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);
}