我得到了一些有背景的文字,背景颜色可以变成任何颜色。
所以,我需要找到一种方法来确定我的文本是否可读,如果对比度不够好,文本应该变为黑色(例如,黄色背景)或白色(深蓝色背景)。
那么,有没有一种方法可以做到这一点?你会用什么来做这项工作?
谢谢!
答案 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;