さて、カラーパレットをランダムに生成することにした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 プログラマーではないので、このように色を扱うことはあまりありません。