段階的なプロセスで、ある色から別の色に移行するための最良の方法を誰かが提案できるのだろうか.
だから - テキスト制限のあるテキストボックスがあります。テキストを白で開始したいのですが、テキストの最大制限に達するまでに赤くします。
これを行う簡単な方法はありますか?どこから始めればいいのか本当にわかりません...
段階的なプロセスで、ある色から別の色に移行するための最良の方法を誰かが提案できるのだろうか.
だから - テキスト制限のあるテキストボックスがあります。テキストを白で開始したいのですが、テキストの最大制限に達するまでに赤くします。
これを行う簡単な方法はありますか?どこから始めればいいのか本当にわかりません...
RGB ではなくHSL または HSVを使用します。0 から 100% までのさまざまなプロパティがあるため、コードで適切にスケーリングできます。
終点の色を、パラメーターの 1 つが強度である色空間に変換して、これを一定に保つことができるようにする必要があります。@jvenemaの提案はまともです。次に、他の 2 つの値を 2 次元の 2 つのポイントとして扱い、スライダーの位置に従ってそれらを結ぶ線に沿って正しいポイントを見つけます。結果の色を RGB に変換して表示します。
また、NSColor の blendedColorWithFraction:ofColor: を試すこともできます。ブレンド方法によっては、希望どおりの結果が得られる場合があります。
単純な線形補間でそれを行います。フロートは精度のためです。
float dr = (r_end - r_start) / (text_limit*1.0 - 1);
float dg = (g_end - g_start) / (text_limit*1.0 - 1);
float db = (b_end - b_start) / (text_limit*1.0 - 1);
int x = start_x;
for(int i=0; i<text_size; ++i)
{
PutOutColoredChar(x,start_y , text[i], (int)(r_start+(dr*i)) , ((int)g_start+(dg*i)), (int)(g_start+(db*i)) );
x += WithOfChar(text[i]);
}
私は色の専門家ではありませんが、これは私にとって醜いものではありませんでした.