あなたは正しい考えを持っています、あなたはただ各R / G/Bカラーチャンネルを処理する必要があります。たとえば、バニラJavaScriptでは、次のことができます。
var a = [255, 0, 0], // First color
b = [0, 0, 255], // Other color
bands = 5, // Bands is the length of your domain
i,
delta = []; // Difference between color in each channel
// Compute difference between each color
for (i = 0; i < 4; i++){
delta[i] = (a[i] - b[i]) / (bands + 1);
}
// Use that difference to create your bands
for (i = 0; i <= bands + 1; i++){
var r = Math.round(a[0] - delta[0] * i);
var g = Math.round(a[1] - delta[1] * i);
var b = Math.round(a[2] - delta[2] * i);
console.log("<div style='background-color: #" + dec2hex(r) + dec2hex(g) + dec2hex(b) + "'>Band " + i + "</div>");
}
// A helper function for formatting
function dec2hex(i) {
return (i+0x100).toString(16).substr(-2).toUpperCase();
}
d3のドキュメントによると、カラーオブジェクトの属性と属性を使用r
して各カラーチャネルを抽出できます。g
b
# d3.rgb(color)
指定されたカラー文字列を解析して、新しいRGBカラーを作成します。色が文字列でない場合は、文字列に強制されます。したがって、このコンストラクターを使用して、既存の色のコピーを作成したり、d3.hsl色をRGBに強制的に変換したりすることもできます。
..。
結果の色は、[0,255]の範囲の赤、緑、青の整数チャネル値として保存されます。チャネルは、返されたオブジェクトのr、g、およびb属性として使用できます。
したがって、上記の例の上部では、次のように言うことができます。
var myColor = d3.rgb("blue"),
a = [myColor.r, myColor.g, myColor.b],
...
それは役に立ちますか?