2

さて、カラーパレットをランダムに生成することにしたQt GUIアプリケーションがあります(データの一意のIDに基づいて表示されるデータを区別できるようにします)。

私が使用するアルゴリズムは次のとおりです。

void Palette::generatePalette(quint32 seed, bool dark) {
    sfmt_t sfmt;
    sfmt_init_gen_rand(&sfmt, seed);
    quint32 i;
    qreal hue;
    QColor col;

    qreal lightness = 0.75;
    qreal saturation = 0.6;

    if (dark) {
        lightness = 0.5;
        saturation = 0.8;
    }

    for (i = 0; i < numberOfColors; i++) {
        hue = sfmt_genrand_res53(&sfmt);
        hue += 0.618033988749895;
        hue = fmod(hue, 1.0);
        col = QColor::fromHslF(hue, saturation, lightness);
        palette.append(col);
    }
}

これにより、ほとんどの場合、グレーの背景に対して非常に目立つ素敵なパステル カラーが得られます。ただし、背景と区別しにくい黄色になる場合があります。

私が知りたいのは、背景色と生成された色をプログラムで比較し、あまりにも区別がつかない場合は、色を破棄して再生成することが可能かどうかです。

グーグルで答えを探しましたが、見つかりません。私も通常は GUI プログラマーではないので、このように色を扱うことはあまりありません。

4

1 に答える 1

1

いくつかの色の距離/差の方法があります。

アプリケーションでは (大きな精度は必要ないため)、ユークリッド距離(またはカラー メトリック スペースの別の基準) を使用できます。この距離がしきい値を下回る場合は、色を削除します。

double colorRGBEuclideanDistance(const QColor& c1, const QColor& c2)
{
    return sqrt(pow(c1.red()-c2.red(), 2) +
                pow(c1.green()-c2.green(), 2) +
                pow(c1.blue()-c2.blue(), 2));
}
于 2013-01-09T15:07:21.917 に答える