2

Java で my color エディターを実装しようとしました。シンプルなソフトウェアである必要があります。ユーザーは 16 進数の RGB で色を入力します (例: 0xFF00FF)。色相、彩度、彩度、明度を計算する方法は知っていますが、この特定の色に色相値を加算または減算する方法は? これが謎です。

使用するアルゴリズムまたは数式はありますか?

今はこの方法を使っていますが、Adobe Photoshop で得たものとは結果が違うと思います。

public void addHue(float addHue) {
    float c = getChroma();
    addHue %= 6;
    if (addHue < 2) {
        float n = 1 - green;
        green = green + addHue * n;
    } else if (addHue < 4) {
        addHue -= 2;
        float n = 1 - blue;
        blue = blue + addHue * n;
    } else if (addHue < 6) {
        addHue -=4;
        float n = 1 - red;
        red = red + addHue * n;
    }
    if (green > 1) green = 1;
    else if (green < 0) green = 0;
    if (red > 1) red = 1;
    else if (red < 0) red = 0;
    if (blue > 1) blue = 1;
    else if (blue < 0) blue = 0;
}
4

2 に答える 2

1

java.awt.Colorクラスはこれを助けることができます。

于 2011-03-22T09:16:42.523 に答える
1

2 つの色相を組み合わせて何を達成しようとしているのか、よくわかりません。

色相は、表現している色の「色合い」を与える角度です。度で考えると、色相は [0, 360[] の範囲になります。また、45 と 405 の値は同じ色相を表します。

色相を操作する場合は、これを考慮する必要があります。つまり、2 つの値、たとえば 355 と 5 の平均を求める場合、正しい結果は 0 (円を描き、これら 2 つの値の間の最小の半角を取る) または 180 (最大の半角) になります。


Android (色操作ユーティリティを持たない) でそれを行った方法は、色の両方の表現 (rgb と hsv) を格納する独自の色クラスを作成することです。

次に、RGBまたはHSVを設定できるメソッドがあります。同じ色空間に追加するのは簡単です。次に、これらのメソッドが呼び出されるたびに、新しい値から色成分を計算する updateHSV または updateRGB メソッドをそれぞれ呼び出します。

class Color {
  float[] hsv;
  float[] rgb;

  public void setRgb(float[] rgb) {
    System.arraycopy(rgb, 0, this.rgb, 0, 3);
    computeHsvFromRgb();
  }

  public void setHsv(float[] hsv) {
    System.arraycopy(hsv, 0, this.hsv, 0, 3);
    computeRgbFromHsv();
  }

  // ...
}

色変換のサンプル コード:

于 2011-03-22T09:18:48.683 に答える