暗号化/ハッシュ関数のようにJava/Androidで任意の文字列から色を生成する方法はありますか?
例: 文字列「Home」は、「#FF1234」のような色を生成します。
文字列「Sky」は「#00CC33」のような色を生成します...
ランダム化なし。そのため、システムは常にその文字列に対して同じ色を計算します
ありがとう
編集:文字列はユーザーが自由に定義できます
これString.hashCode()
は int 値を返すので、それを 16 進値に変換するだけです。
String s = "Home";
String color = String.format("#%X", s.hashCode());
一貫した不透明度:
String opacity = "#99"; //opacity between 00-ff
String hexColor = String.format(
opacity + "%06X", (0xFFFFFF & anyString.hashCode()));
または、新しいマテリアル デザイン アンドロイド パレットを使用する:
https://gist.github.com/odedhb/79d9ea471c10c040245e
文字列のメッセージダイジェストを作成する方法については、こちらをご覧ください。
http://www.mkyong.com/java/java-sha-hashing-example/
メッセージダイジェストを作成したら、生成されたすべてのバイト数を使用してカラー値を作成します。最下位、最上位、中間のどこでも使用できます。
リソースファイルを変更しようとしていないと思います。
正直に言うと、あなたがそれをどのようにやりたいかによって異なります。それを達成する方法は何百万もあります
私にとっては、各文字のアスキー値を取得し、それらをすべて加算してから、16 進数に変換します。そうは言っても、文字が多すぎるケースをカバーするには、16 進文字列の最大サイズに変更します。すなわち。FFFFFF のように、ラップアラウンドして最初からやり直します。
//pseudocode
counter = 0;
foreach(char in string){
counter+=(int)char;
}
counter = convertToHex(counter)%0xffffff;
string x = "#"+counter.toString();
それを文字列に格納した後
string x = "#"+hexVal.toString();
それらを使用して、やりたいことを実行できます。
次のようなことを試すことができます:
String s = "Home";
byte[] b = s.getBytes("US-ASCII");
StringBuffer hexString = new StringBuffer();
for (int i=0;i<b.length;i++) {
hexString.append(Integer.toHexString(0xFF & b[i]));
}
String finalHex = "#" + hexString.substring(0,6);
System.out.println(finalHex);
ヘックスを生成します:#486f6d
同様に、必要なすべてのsに対して16進数を生成し、それらをキーと値のペアとしてaString
に追加し続けます。HashMap