5

重複の可能性:
.NET での 3 色間の色補間

C# を使用して、色のカテゴリ リストを取得しようとしています。

Red:
255, 69, 0
255, 99, 71
etc.. 

Green:
0, 250, 154
143, 188, 139
etc...

これまでのところ、私はかなり失敗しています。理想的には、2 つの HEX 参照または RGB 参照を提供し、それら 2 つの参照の間で 10 色のリストを取得する方法が必要です。これはC#で可能ですか?

編集

これを見つけました... http://meyerweb.com/eric/tools/color-blend/ jsをc#に変換するだけです。完成したら投稿します。

4

2 に答える 2

7

あなたが探しているものは補間と呼ばれます。この特定のシナリオでは、2 つのキー ポイント間でデータを補間する必要があります。

プログラミングでは補間は非常に一般的なシナリオであるため、線形補間またはカーディナル スプライン補間を使用して、2 つ以上のキー ポイント間を簡単に補間できるようにする一般的なソリューションを作成しました

私のライブラリを使用すると、次のように中間色を計算できます。

var keyPoints = new CumulativeKeyPointCollection<Color, double>(
    new ColorInterpolationProvider() );

keyPoints.Add( Color.FromArgb(0, 250, 154) );
keyPoints.Add( Color.FromArgb(143, 188, 139) );

var linear = new LinearInterpolation<Color, double>( keyPoints ); 

// E.g. to get a color halfway the two other colors.
Color colorHalfway = linear.Interpolate( 0.5 );

ColorInterpolationProviderから拡張して実装する必要がありますAbstractInterpolationProvider<Color, double>が、これは非常に簡単です。詳細については、私のブログ投稿 を参照してください。

この例ではクラスを使用していますが、別の補間プロバイダーを渡すMedia.Colorことで他のクラスをサポートすることもできます。Color

于 2012-11-06T14:38:48.063 に答える
7

あなたに役立つ組み込み関数については知りませんが、自分で行うことができます。

3 つの数値 (R、G、B) を使用して色を定義できる限り、2 つの色を使用できます。

(R1,G1,B1)
(R2,G2,B2)

次に、ペア間で diff を分割し、間隔で数値を生成します。

int numberOfIntervals = 10; //or change to whatever you want.
var interval_R = (R2 - R1) / numberOfIntervals;
var interval_G = (G2 - G1) / numberOfIntervals;
var interval_B = (B2 - B1) / numberOfIntervals;

var current_R = R1;
var current_G = G1;
var current_B = B1;

for (var i = 0; i <= numberOfIntervals; i++)
{
    var color = Color.FromRGB(current_R, current_G, current_B);
    //do something with color.

    //increment.
    current_R += interval_R;
    current_G += interval_G;
    current_B += interval_B;
}

私はコードをコンパイルしていませんが、アイデアはわかります。

于 2012-11-06T14:25:14.557 に答える