0

Color.RGBtoHSB(r、g、b、hsb)関数がr、g、bをH、S、Bに変換する前に正規化するかどうか、または組み込み関数のJava実装をどこで取得できるかはわかりません。

4

4 に答える 4

2

Eclipseを開いて-Ctrl+Shift + T(開いたタイプ)、Colorと入力し、java.awtで見つけてください-そして出来上がり。ほとんどの組み込みタイプで機能します。

于 2012-08-31T13:47:32.723 に答える
2

Colorクラスのソースコードから直接実装したものは次のとおりです。

public static float[] RGBtoHSB(int r, int g, int b, float[] hsbvals) {
float hue, saturation, brightness;
if (hsbvals == null) {
    hsbvals = new float[3];
}
    int cmax = (r > g) ? r : g;
if (b > cmax) cmax = b;
int cmin = (r < g) ? r : g;
if (b < cmin) cmin = b;

brightness = ((float) cmax) / 255.0f;
if (cmax != 0)
    saturation = ((float) (cmax - cmin)) / ((float) cmax);
else
    saturation = 0;
if (saturation == 0)
    hue = 0;
else {
    float redc = ((float) (cmax - r)) / ((float) (cmax - cmin));
    float greenc = ((float) (cmax - g)) / ((float) (cmax - cmin));
    float bluec = ((float) (cmax - b)) / ((float) (cmax - cmin));
    if (r == cmax)
    hue = bluec - greenc;
    else if (g == cmax)
        hue = 2.0f + redc - bluec;
        else
    hue = 4.0f + greenc - redc;
    hue = hue / 6.0f;
    if (hue < 0)
    hue = hue + 1.0f;
}
hsbvals[0] = hue;
hsbvals[1] = saturation;
hsbvals[2] = brightness;
return hsbvals;
}
于 2012-08-31T13:46:29.543 に答える
0

RGBは最初に正規化されません。これは、通常は正しい範囲内で正規化されます。したがって、明るさは最大のコンポーネントであり、明るさは0〜255の範囲から0〜1の範囲に正規化されます。彩度もこのようなもので、最大のコンポーネントから最小のコンポーネントまでの距離であり、0-1の範囲に絞り込まれます。そして、色相はカラーホイールの角度です。ただし、HSVに直接変換されず、sRGBなどで正規化されません(sRGBはRGB / 255であり、0-1の範囲に正規化されます)。

しかし、これを実際に知る必要はまったくありません。HSBに変換します。束を前後に変換すると、丸め誤差が発生する可能性がありますか。できますよ。これ以外は、RGBを1または1,000,000にスケーリングするかどうかは関係ありませんが、0〜1の範囲の色を表すまったく異なる方法に変換されます。

于 2012-09-06T09:24:44.687 に答える
0

注:から返される色相は、0から255の間ではなくColor.RGBtoHSB、0.0から1.0の間で正規化されます: `` `

public static void main(String[] args) {
        float[] hsbvals = new float[3];
        Random random = new Random();
        for(int i=0;i<20;i++) {
            Color.RGBtoHSB(random.nextInt(256),random.nextInt(256),random.nextInt(256),hsbvals);
            System.out.println(Arrays.toString(hsbvals));
        }
    }

`` `

于 2018-03-11T17:17:49.943 に答える