質問
次のシナリオを考えてみましょう。白から赤、白から青、白からピンク、白からオレンジなどのコードカラーを生成できる関数。
カラー コードは RGB 形式で、値は 0 ~ 255 です。
何か案は?そのようなアルゴリズムへの疑似コードまたはリンクを教えていただけますか?
解決
それは聞こえる - あなたの場合には、白からの補間します指定された色。例えば、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で、あなたはint
sの限界に近い取得することはできませんので、
編集:コメントで述べたように、RGBがうまく線形補間を利用するには最高のドメインではないかもしれません。あなたは HSLまたはHSV のにRGB値へ/からの変換、および上で補間を行うオフ最善であってもよいですそれら。これは、お使いのプラットフォームに応じて、簡単か難しいかもしれません。彼らはあなたのために提供していない場合は、前の文のWikipediaのリンクは、適切な計算のための式を与えます。
他のヒント
アルゴリズム:
- 白のRGB値を見つける
- 他の色の RGB 値を見つけます (たとえば、赤、青、ピンク、オレンジと言った場合)
- RGB 成分が 2 つの極値の RGB 成分の間に算術的に含まれる RGB 値を計算します。
たとえば、一方の極値が (0,0,0) で、もう一方の極値が (0,255,255) である場合、これら 2 つの色の中間の値は (0,128,128) になります。これら 2 つの値の間の 4 分の 1 の値は (0,64,64) です。
既知の特定の点による色の補間は、データをグラフ化するための配色を構築するためによく使用されます。明示的な補間式の代わりに、その表現の背後に何らかのデザインがある配色を選択することもできます。このようなスキームの良い情報源は次のとおりです。 カラーブリューワー.
補間が必要な場合でも、適切に設計された配色から開始すると、より使いやすい結果が得られる可能性があります。
あなたが間のグラデーションをする2つの色で起動し、R、G、Bの部分でそれらを分割します。
あなたを介してフェードインしたいどのように多くの「手順」を決めます。
ステップ数とR、GとB部との間の差を分割。これで、各色の「段差」を持っています。
各工程を経てループと反復ごとに一度カラー値に段差を加えます。整数にラウンドあなたがの最後のの事ます。
どのような色、あなたはに変更したいのですか?赤に白のは、ちょうど255 255 255で始まる、あなたが持っているまで、2番目の2をデクリメントする場合である255 0 0青が最後の値を維持し、0 0 255で終わるためにデクリメントだろう、など。