比较颜色对比度以选择最终颜色

时间:2011-08-03 14:35:33

标签: flash colors actionscript-2 background-color formula

我得到了一些有背景的文字,背景颜色可以变成任何颜色。

所以,我需要找到一种方法来确定我的文本是否可读,如果对比度不够好,文本应该变为黑色(例如,黄色背景)或白色(深蓝色背景)。

那么,有没有一种方法可以做到这一点?你会用什么来做这项工作?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试将颜色转换为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;