我正在为我的应用程序小部件实现一个小部件透明度选项,尽管我有一些麻烦得到十六进制颜色值正确。完全新的十六进制颜色透明度我搜索了一下,虽然我找不到一个具体的答案,我的问题。

我想通过十六进制颜色来设置透明度假设我的十六进制颜色id为#33b5e5我想让它的透明度为50%。然后我使用“#8033b5e5”,因为80是50%。

我在这里找到了一个有用的图表:http://www.dtp-aus.com/hexadeci.htm。根据这些数据,我得出了这个结论:

0% = #00
10% = #16
20% = #32
30% = #48
40% = #64
50% = #80
60% = #96
70% = #112
80% = #128
90% = #144

当十六进制大于100时,问题就出现了。十六进制颜色码只能有8个符号长,对吗?例如#11233b5e5(80%)崩溃。

我该怎么做才能使我也能使用更高的数字呢?


当前回答

这个图表没有显示百分比。“#90”不是“90%”。 那个图表显示了十六进制到十进制的转换。十六进制数90(通常表示为0x90)相当于十进制数144。

十六进制数以16为底,因此每个数字都是0到f之间的值。两个字节十六进制值(例如颜色的透明度)的最大值是0xFF,或者十进制的255。因此100%是0xFF。

其他回答

简单的回答:完整的百分比表

您可以看到十六进制值的完整百分比表,并在https://play.golang.org/p/l1JaPYFzDkI中运行该playground中的代码。

表格告诉我们结果,而不是如何找到结果。接下来的部分将解释如何计算自己。

伪代码中的简短解释

占十六进制值的百分比

十进制=百分比* 255 / 100。例如:十进制= 50*255/100 = 127.5 将十进制转换为十六进制值。例:十进制的127.5 = 7*16十进制的o.o.1 + 15 = 7F

十六进制值到百分比

将十六进制值转换为十进制。例:D6 = 13*16 1 + 6 = 214 百分比=(十进制值)* 100 / 255。例如:214 *100/255 = 84%

关于十进制<=>十六进制转换的更多信息

长话短说:如何心算

这个问题一般可以用交叉乘法来解决。

我们有一个百分比(范围从0到100)和另一个数字(范围从0到255),然后转换为十六进制。

100 <==> 255(十六进制中的FF) 0 <==> 0(十六进制为00)

为1%

1 * 255 / 100 = 2,5 如果四舍五入,六边形中的5等于2。

为2%

2 * 255 / 100 = 5 六边形中的5是5。

最佳答案中的表格给出了5%的百分比。

如何心算两者之间的数字?由于2.5的增量,第一个加2,下一个加3

95% - F2 //启动 96% - F4 // F2加2 97% - F7 //加3。或者F2 + 5 = F7 98% - F9 //加2 99% - FC // add 3。9 + 3 = 12的六进制:C 100% - FF //添加2


我更喜欢教授如何找到解决方案,而不是展示一个你不知道结果从何而来的答案表。

给一个人一条鱼,你可以喂他一天;授人以渔,授人以渔 你喂了他一辈子

这个图表没有显示百分比。“#90”不是“90%”。 那个图表显示了十六进制到十进制的转换。十六进制数90(通常表示为0x90)相当于十进制数144。

十六进制数以16为底,因此每个数字都是0到f之间的值。两个字节十六进制值(例如颜色的透明度)的最大值是0xFF,或者十进制的255。因此100%是0xFF。

我为一个android应用程序构建了这个小助手方法,可能会用到:

 /**
 * @param originalColor color, without alpha
 * @param alpha         from 0.0 to 1.0
 * @return
 */
public static String addAlpha(String originalColor, double alpha) {
    long alphaFixed = Math.round(alpha * 255);
    String alphaHex = Long.toHexString(alphaFixed);
    if (alphaHex.length() == 1) {
        alphaHex = "0" + alphaHex;
    }
    originalColor = originalColor.replace("#", "#" + alphaHex);


    return originalColor;
}

彩色十六进制表示法如下:#AARRGGBB

A: alpha R:红色 G:绿色 B:蓝色

首先应该看看十六进制是如何工作的。你最多可以写FF。

我知道这是一个老问题,但我在做类似的事情时遇到过这个问题。

使用SASS,你有一个非常优雅的方式将RGBA转换为十六进制ARGB: ie-hex-str。我在mixin中使用了它。

@mixin ie8-rgba ($r, $g, $b, $a){
    $rgba: rgba($r, $g, $b, $a);
    $ie8-rgba: ie-hex-str($rgba);
    .lt-ie9 &{
      background-color: transparent;
      filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#{$ie8-rgba}', endColorstr='#{$ie8-rgba}');
  }
}

.transparent{
    @include ie8-rgba(88,153,131,.8);
    background-color: rgba(88,153,131,.8);
}

输出:

.transparent { Background-color: rgba(88, 153, 131, 0.8); } .lt-ie9 .transparent { 背景颜色:透明; 过滤器:progid: DXImageTransform.Microsoft。梯度(GradientType = 0, startColorstr = # CC589983, endColorstr = ' # CC589983 '); 变焦:1; }