squ*_*ish 10 html java fonts colors
参考为什么HTML认为"chucknorris"是一种颜色?
以下分析是否正确?
首先,所有非十六进制字符都替换为' 0'.
测试 - > 0e00000
然后,如果它不能被3整除,则将'0'附加到它上面.
0e00000 - > 0e0000000
然后分成3个相等的组.
0e0000000 - > 0e0 000 000
然后获取每个组的前2个字符并将它们连接在一起以获取颜色代码.
0e0 000 000 - > 0e0000
#0e0000 接近黑色.
但是如果你使用这个网站并输入字体颜色作为"测试",它会显示为红色阴影:http://www.w3schools.com/tags/tryit.asp?filename = tryhtml_font_color
有什么我想念的吗?
在答复后附录:
我正在编写一个Android应用程序,需要我将字体颜色=""解析为颜色代码.我把算法拼凑在一起,以备将来参考:
public String getColourCode(String nonStandardColour) {
String rtnVal = "#000000";
// first replace all non-hex characters
String converted = nonStandardColour.toLowerCase().replaceAll("[g-z]", "0");
System.out.println(nonStandardColour + " is now " + converted);
System.out.println("Length: " + converted.length());
if (converted.length() <= 3) {
// append "0"s if length != 3
while (converted.length() !=3) {
converted = converted + "0";
}
System.out.println("Converted colour is now " + converted);
// Length is 3, so split into 3 characters and prepend 0 to each
String[] colourArray = new String[3];
colourArray[0] = "0" + convertedOpNickColour.substring(0, 1);
colourArray[1] = "0" + convertedOpNickColour.substring(1, 2);
colourArray[2] = "0" + convertedOpNickColour.substring(2, 3);
rtnVal = "#" + Integer.toHexString(Color.rgb(
Integer.parseInt(colourArray[0], 16),
Integer.parseInt(colourArray[1], 16),
Integer.parseInt(colourArray[2], 16)));
}
else { // converted.length() is >= 4
System.out.println("Appending 0s until divisible by 3");
while(converted.length() % 3 != 0) {
converted = converted + "0";
}
System.out.println("Converted colour is now " + converted);
// divide into 3 equal groups
List<String> colourArray2 = new ArrayList<String>();
int index = 0;
while (index<converted.length()) {
colourArray2.add(converted.substring(
index, Math.min(index(converted.length()/3),converted.length())));
index+=(converted.length()/3);
}
System.out.printf("The 3 groups are:");
System.out.printf(colourArray2.get(0));
System.out.printf(colourArray2.get(1));
System.out.printf(colourArray2.get(2));
// if the groups are e.g. 0f0 0f0 0f0
if (rgbColour.get(0).length() >=3 ) {
rtnVal = Integer.toHexString(Color.rgb(
Integer.parseInt(colourArray2.get(0).substring(0,2), 16),
Integer.parseInt(colourArray2.get(1).substring(0,2), 16),
Integer.parseInt(colourArray2.get(2).substring(0,2), 16)));
// remove alpha
System.out.println("rtnVal is #" + rtnVal.substring(2));
return "#" + rtnVal.substring(2);
}
// groups are e.g. 0f 0f 0f
else {
rtnVal = Integer.toHexString(Color.rgb(
Integer.parseInt(colourArray2.get(0), 16),
Integer.parseInt(colourArray2.get(1), 16),
Integer.parseInt(colourArray2.get(2), 16)));
System.out.println("rtnVal is #" + rtnVal.substring(2));
return "#" + rtnVal.substring(2);
}
}
return rtnVal;
}
Run Code Online (Sandbox Code Playgroud)
它实际上做的是将其分为RGB值,而不是十六进制颜色值.所以你不是在创造#0e0000,而是在创造RGB(0e0, 000, 000).既然我们知道这000很简单0,我们只需要看一下0e0它的一部分.从这里开始,0如果超过2位数,则需要将前导s 删除到两位数,然后截断到数字中的左两位数,这样就可以得到e0.当你将它从十六进制转换为十进制时,你最终会得到e0 = 224.这给你的是RGB(224, 0, 0),或者大多是红色.
更多例子:
eesting => ee00000 => ee0 000 000 => RGB(ee0, 000, 000) => RGB(ee, 00, 00) => RGB(238, 0, 0)
eeeting => eee0000 => eee 000 000 => RGB(eee, 000, 000) => RGB(ee, 00, 00) => RGB(238, 0, 0)
eeeeing => eeee000 => eee e00 000 => RGB(eee, e00, 000) => RGB(ee, e0, 00) => RGB(238, 224, 0)
eefeefeef => eefeefeef => eef eef eef => RGB(eef, eef, eef) => RGB(ee, ee, ee) => RGB(238, 238, 238)
teeteetee => 0ee0ee0ee => 0ee 0ee 0ee => RGB(0ee, 0ee, 0ee) => RGB(ee, ee, ee) => RGB(238, 238, 238)
0f0f0f => 0f0f0f => 0f 0f 0f => RGB(0f, 0f, 0f) => RGB(0f, 0f, 0f) => RGB(15, 15, 15)
tftftf => 0f0f0f => 0f 0f 0f => RGB(0f, 0f, 0f) => RGB(0f, 0f, 0f) => RGB(15, 15, 15)
ttfttfttf => 00f00f00f => 00f 00f 00f => RGB(00f, 00f, 00f) => RGB(0f, 0f, 0f) => RGB(15, 15, 15)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |