色のリスト(たとえば#000000)があり、色の種類(青、赤、緑など)を検出してから別の色の種類に変更したいと思います。これは可能ですか?このタスクのためのフレームワーク/ライブラリはありますか?Javaの色検出器
例:
Iは、私は青に変換し、それは、例えば#1 1313EB(青)のためになるカラー#EB1369(赤色)を有します。
色のリスト(たとえば#000000)があり、色の種類(青、赤、緑など)を検出してから別の色の種類に変更したいと思います。これは可能ですか?このタスクのためのフレームワーク/ライブラリはありますか?Javaの色検出器
例:
Iは、私は青に変換し、それは、例えば#1 1313EB(青)のためになるカラー#EB1369(赤色)を有します。
ここでは色相環の周りの色を移動させる機能があります。あなたは本当に何が起こっているか理解するためにHSB(またはHSV)カラーシステム上のWikipediaのページをお読みください:http://en.wikipedia.org/wiki/HSV_color_space
/** Converts an input color given as a String such as "ab451e" to
* the HSB color space. Shifts its hue from the given angle in degrees.
* Then returns the new color in the same format it was given.
*
* For example shift("ff0000", 180); returns "80ff00" (green is the opposite of red).*/
public static String shift(String rgbS, int angle) {
// Convert String to integer value
int value = Integer.parseInt(rgbS, 16);
// Separate red green and blue
int r = value >> 16;
int g = (value >> 8) & 0xff;
int b = value & 0xff;
// Convert to hsb
float[] hsb = Color.RGBtoHSB(r, g, b, null);
// Convert angle to floating point between 0 and 1.0
float angleF = (float)(angle/360.0);
// Shift the hue using the angle.
float newAngle = hsb[0] + angleF;
if(newAngle > 1.0)
newAngle = newAngle - 1.0f;
hsb[0] = newAngle;
// Convert back to RGB, removing the alpha component
int rgb = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]);
rgb = rgb & 0xffffff;
// Build a new String
return Integer.toHexString(rgb);
}
検出色が複雑になることがあり、それはあなたが本当に期待する結果に依存します。
単純な近似値(赤、緑、青、黄色など)であれば、HSB色空間の色相円を見ることができ、定義したい色ごとに色相値を選択できますあなたが入力した色を、あなたが選んだ最も近い色にマッピングします。
また、名前付きHTMLの色:http://www.w3schools.com/html/html_colornames.aspなどを使用することもできます。このリストを取得し、プログラムでマッピングを作成します。次に、取得した色をマップ内の最も近い色にマップし、その名前を返します。ただし、2つの色の間の距離を計算するのは難しい(特にRGBでは)場合があり、単純なアプローチ(チャネルごとの違いなど)は驚くほど悪い結果をもたらす可能性があります。測色は複雑なトピックで、このページでは良い方法を見つけることができます:http://en.wikipedia.org/wiki/Color_difference
RGB値をHSV(正確にはHSB)に変換してみてください - 人間にとってより快適な色のフォーマットです。変換後は、H
V(おそらく)
を変更してRGBに変換し直す必要があります。
彼は色相を変更する必要があります色)ではない値(〜=明るさ)。また、javaの 'Color'はネイティブでHSBをサポートしますがHSVはサポートしないので、前者は使いやすくなることに注意してください。 – ARRG
修正ありがとうございました:) – IProblemFactory
私はあなたがHSBにRGB色を変換したいと思います。このwuthを行うことができます。
java.awt.Color.RGBtoHSB(...)
、あなたは簡単にHの値は青のあなたの定義に収まるwhetther決定し、何が好きにそれを修正することができます。この後、あなたは簡単に介して、RGBに戻し、それを変換することができます:
java.awt.Color.getHSBColor(...)
そして、あなたはちょうどtransofrmationマトリクスによって色ベクトルを乗算jawa.awt.color好きではありませんIFG。
各HEXカラーには赤、緑、青の3つの部分があり、#
はHEXカラーを示し、次の2文字は赤の量です。次の2つは緑色で、次の2つは青色です。すなわち、RGB
の最大16進値は255であり、最小値は0,で、ゼロであることができます。
あなたはこのように主張することができますので、私は#FFFFFF
は(一緒にすべての色)白である理由であるあなたに#020700
を与える2つの赤の部分、7つの緑の部分、およびゼロ青い部分、と色をしたいです#000000
は黒です(色はまったくありません)
このロジックでは、任意の方法で色を変更できます。 Color
クラスも多くの助けになります。
#eb1369が赤であることをどのように知っていますか?私はそれがあることを知っていることを意味しますが、どのような定義や測色コンセプトを使用したいですか? – ARRG
赤色に見える場合、それは私にとっては赤です:)しかし、コンピュータがどのように色の種類を検出できるのかわからないので、私はそれについて質問しています... – newbie