Сравнение цветового контраста для выбора окончательных цветов - PullRequest
1 голос
/ 03 августа 2011

У меня есть некоторый текст с фоном, и цвет фона может измениться на любой цвет.

Итак, мне нужно найти способ выяснить, будет ли мой текст читаемым или нет, текст долженизмените на черный (например, желтый фон) или белый (темно-синий фон), если контраст недостаточно хороший.

Итак, есть ли способ сделать это? Что бы вы использовали, чтобы сделать эту работу?

Спасибо!

1 Ответ

0 голосов
/ 03 августа 2011

Попробуйте преобразовать свой цвет в пространство HSB и проверьте свойство яркости (от 0 до 100, 0 темное).

Редактировать: AS3 версия hex2Hsb

public static function hex2Hsb(hex : Number) : Object {
    var rgb : Object = {r:(hex >> 16) & 0xFF, g:(hex >> 8) & 0xFF, b:hex & 0xFF};

    var hsb : Object = new Object();
    hsb["b"] = Math.max(rgb["r"], rgb["g"], rgb["b"]);
    var min : Number = Math.min(rgb["r"], rgb["g"], rgb["b"]);
    hsb["s"] = (hsb["b"] <= 0) ? 0 : Math.round(100 * (hsb["b"] - min) / hsb["b"]);
    hsb["b"] = Math.round((hsb["b"] / 255) * 100);

    hsb["h"] = 0;
    if ((rgb["r"] == rgb["g"]) && (rgb["g"] == rgb["b"])) {
    hsb["h"] = 0;
    } else if (rgb["r"] >= rgb["g"] && rgb["g"] >= rgb["b"]) {
    hsb["h"] = 60 * (rgb["g"] - rgb["b"]) / (rgb["r"] - rgb["b"]);
    } else if (rgb["g"] >= rgb["r"] && rgb["r"] >= rgb["b"]) {
    hsb["h"] = 60 + 60 * (rgb["g"] - rgb["r"]) / (rgb["g"] - rgb["b"]);
    } else if (rgb["g"] >= rgb["b"] && rgb["b"] >= rgb["r"]) {
    hsb["h"] = 120 + 60 * (rgb["b"] - rgb["r"]) / (rgb["g"] - rgb["r"]);
    } else if (rgb["b"] >= rgb["g"] && rgb["g"] >= rgb["r"]) {
    hsb["h"] = 180 + 60 * (rgb["b"] - rgb["g"]) / (rgb["b"] - rgb["r"]);
    } else if (rgb["b"] >= rgb["r"] && rgb["r"] >= rgb["g"]) {
    hsb["h"] = 240 + 60 * (rgb["r"] - rgb["g"]) / (rgb["b"] - rgb["g"]);
    } else if (rgb["r"] >= rgb["b"] && rgb["b"] >= rgb["g"]) {
    hsb["h"] = 300 + 60 * (rgb["r"] - rgb["b"]) / (rgb["r"] - rgb["g"]);
    } else {
    hsb["h"] = 0;
    }
    hsb["h"] = Math.round(hsb["h"]);

    return hsb;
}

Применение:

var hsb : Number = ColorUtils.hex2Hsb(_textField.textColor);
_textField.backgroundColor = hsb["b"] > 50 ? 0 : 0xFFFFFF;
...