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