1

RGBの色がある場合。別のRGB値が最初のRGBに近い場合はtrueを返し、そうでない場合はfalseを返すjavascript関数を作成するにはどうすればよいですか?

4

2 に答える 2

4

私はこれを使用しましたが、私にとっては非常にうまく機能します:

// assuming that color1 and color2 are objects with r, g and b properties
// and tolerance is the "distance" of colors in range 0-255
function isNeighborColor(color1, color2, tolerance) {
    if(tolerance == undefined) {
        tolerance = 32;
    }

    return Math.abs(color1.r - color2.r) <= tolerance
        && Math.abs(color1.g - color2.g) <= tolerance
        && Math.abs(color1.b - color2.b) <= tolerance;
}

特定の問題によっては、色の距離の意味が異なる場合があります。たとえば、あなたの場合、に変更する必要があるかもしれませ&&||

于 2012-07-16T14:33:08.960 に答える
1

それはすべて、あなたにとって「近い」という意味に依存します。次のような関数を作成できます。

var color1 = { "r": 255, "g": 255, "b": 255 }
var color2 = { "r": 250, "g": 252, "b": 252 }

function isClose(color1, color2) {
    var threshold = 30;
    var distance = Math.abs(color1.r - color2.r) + Math.abs(color1.g - color2.g) + Math.abs(color1.b - color2.b);

    if (distance < threshold) return true;
    return false;
}

これは(単純な RGB ベクトル距離に基づいて)非常に近い色に一致しますが、実験的に選択する必要があるしきい値パラメーターがまだあります。

于 2012-07-16T14:35:33.270 に答える