2011-08-03 122 views
1

我得到了一些有背景的文字,並且背景顏色可以更改爲任何顏色。因此,如果對比度不夠好,我需要找到一種方法來判斷我的文本是否可讀,如果對比度不夠好,文本應該變爲黑色(例如黃色背景)或白色(深藍色背景) 。比較顏色對比以選擇最終顏色

那麼,有沒有一種方法來做到這一點?,你會用什麼來做到這一點?

謝謝!

+0

退房這種顏色對比工具:http://accessible-colors.com –

回答

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; 
+0

我不明白,什麼亮度財產那個對象? – Artemix

+0

添加了hex2hsb的應用程序。 –