Вычислить шестнадцатеричный код цвета для произвольной строки - PullRequest
4 голосов
/ 17 марта 2010

Заголовок

Есть ли способ сопоставить произвольную строку с кодом HEX COLOR. Я попытался вычислить число HEX для строки, используя строковый хэш-код. Теперь мне нужно преобразовать это шестнадцатеричное число в шесть цифр, которые находятся в диапазоне цветового кода 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()));
}

Ответы [ 3 ]

10 голосов
/ 17 марта 2010

Если вас не очень интересует «значение» цвета, вы можете просто разделить биты 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));
}
2 голосов
/ 17 марта 2010

Как на счет hashcode с 0x00FFFFFF

1 голос
/ 12 ноября 2014

Я столкнулся с этим вопросом, когда искал решение для ruby, поэтому подумал, что добавлю ответ для ruby, если кто-то пойдет по тому же пути, что и я. В итоге я использовал следующий метод, который создает тот же шестизначный шестнадцатеричный код из строки, используя метод hash для строк ruby ​​и необязательный параметр, указывающий базу Fixnum.to_s. Он пропускает 1, а не 0, чтобы пропустить отрицательные знаки.

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