3

次のシナリオを考えてみましょう: 白から赤、白から青、白からピンク、白からオレンジなどのコード色を生成できる関数。

カラー コードは RGB 形式で、値は 0 ~ 255 です。

何か案は?そのようなアルゴリズムへの疑似コードまたはリンクを教えてもらえますか?

4

5 に答える 5

12

あなたの場合、白から指定された色に補間していますたとえば、C# では次のようになります。

public IEnumerable<Color> Interpolate(Color from, Color to, int steps)
{
    int range = steps-1; // Makes things a bit easier
    for (int i=0; i < steps; i++)
    {
        // i is the proportion of the "to" colour to use.
        // j is the proportion of the "from" colour to use.

        int j = range - i;
        int r = ((from.R * j) + (to.R * i)) / range;
        int g = ((from.G * j) + (to.G * i)) / range;
        int b = ((from.B * j) + (to.B * i)) / range;
        yield return new Color(r, g, b);
    }
}

もちろん、線形補間以外にも方法はありますが、それが最も簡単な方法です。オーバーフローの可能性を考慮する必要があるため、ステップ数が多い場合や値が大きい場合は注意が必要です。ただし、この場合は問題ありません。256 を超えるステップが必要になる可能性は低く、最大値は 255 であるため、ints の限界に近づくことはありません。

編集: コメントで述べたように、RGB は線形補間を使用するのに最適なドメインではない可能性があります。from/to RGB 値をHSL または HSVに変換し、それらを補間することをお勧めします。プラットフォームによっては、これが簡単な場合と難しい場合があります。前の文のウィキペディアのリンクは、適切な計算式が提供されていない場合に提供します。

于 2009-05-17T19:19:22.760 に答える
3

アルゴリズム:

  1. 白の RGB 値を求める
  2. 他の色の RGB 値を見つけます (たとえば、赤、青、ピンク、オレンジなど)。
  3. RGB コンポーネントが算術的に 2 つの極値の RGB コンポーネントの間にある RGB 値を計算します。

たとえば、一方の極値が (0,0,0) で、もう一方の極値が (0,255,255) である場合、これら 2 つの色の中間の値は (0,128,128) であり、これらの値の 4 分の 1 の値です。 2 つの値は (0,64,64) です。

于 2009-05-17T19:18:55.180 に答える
2

既知の特定の点を介して色を補間することは、データをグラフ化するための配色を構築するためによく使用されます。明示的な補間式に代わる方法は、表現の背後に何らかのデザインがある配色を選択することです。このようなスキームの良いソースはColorBrewerです。

補間が必要な場合でも、適切に設計された配色から始めると、はるかに使いやすい結果が得られます。

于 2009-05-18T23:22:07.297 に答える
1

グラデーションが必要な 2 つの色から始めて、それらを R、G、B の部分に分割します。

フェードスルーする「ステップ」の数を決定します。

R、G、Bパートの差をステップ数で割ります。これで、色ごとに「段差」ができました。

各ステップをループし、反復ごとに 1 回、ステップ差をカラー値に追加します。最後に整数に丸めます。

于 2009-05-17T19:19:52.120 に答える
0

何色に変えたいですか?白から赤は、255 255 255 で始まり、255 0 0 になるまで 2 番目の 2 つを減らすだけの場合です。青は、最後の値を保持し、0 0 255 になるまで減分します。

于 2009-05-17T19:17:56.337 に答える