十六进制颜色透明

尽管我在正确设置十六进制颜色值方面遇到一些麻烦,但我正在为我的应用程序小部件实现小部件透明度选项。完全不了解十六进制颜色透明度,尽管找不到具体问题的答案,但我进行了一些搜索。

我想通过十六进制颜色设置透明度,所以假设我的十六进制颜色 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%)崩溃。

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

答案

这是十六进制值的正确百分比表。例如,对于 50%的白色,您将使用#80FFFFFF。

  • 100%— FF
  • 95%-F2
  • 90%— E6
  • 85%— D9
  • 80%— CC
  • 75%—高炉
  • 70%— B3
  • 65%— A6
  • 60%— 99
  • 55%— 8 摄氏度
  • 50%— 80
  • 45%— 73
  • 40%— 66
  • 35%— 59
  • 30%— 4D
  • 25%— 40
  • 20%— 33
  • 15%— 26
  • 10%— 1A
  • 5%— 0 天
  • 0%-00

来源

简短答案

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

伪代码中的简短说明

十六进制值的百分比

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

十六进制值到百分比

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

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

长答案:如何计算

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

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

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

对于 1%

  • 1 * 255/100 = 2.5
  • 如果四舍五入,则 6.5 中的 6.5 为2

对于 2%

  • 2 * 255/100 = 5
  • 六分之五是5

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

如何计算脑海之间的数字?由于2.5 的增量,请在第一个添加 2,然后在下一个添加 3

  • 95%— F2 // 开始
  • 96%— F4 // 将 2 加到 F2
  • 97%— F7 // 加 3。或 F2 + 5 = F7
  • 98%— F9 // 加 2
  • 99%— FC // 在 hexa 中加 3。9+ 3 = 12:C
  • 100%— FF // 加 2

我更喜欢教如何找到解决方案,而不是交给表格

给一个人一条鱼,你就喂他一天。教男人钓鱼,你一辈子喂他

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

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

您首先应该看一下十六进制的工作方式。您最多可以写 FF。

该图表未显示百分比。 “#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;
}

在此处输入图片说明

这可能是很晚的答案了。但是这张表杀死了它。

所有百分比值都映射到十六进制值。

http://online.sfsu.edu/chrism/hexval.html

在 Google 搜索上尝试此操作(或单击此处

255 * .2 to hex

结果将生成0x33

但是,google 不会舍入值,因此您只能使用 1 位数的乘法器。如果要使用说. 85,则必须先获得 255 * .85 的(rounded-value here) to hex ,然后在 Google 搜索中键入(rounded-value here) to hex

我意识到这是一个古老的问题,但是在执行类似操作时遇到了这个问题。

使用 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 {
  background-color: transparent;
  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#CC589983', endColorstr='#CC589983');
  zoom: 1;
}

例如,使用 python 进行计算(用 python 3 编写),透明度为 50%:

hex(round(256*0.50))

:)

我总是不断来这里检查 int / hex alpha 值。因此,最终在我的 Java utils 类中创建了一个简单的方法。此方法会将百分比转换为十六进制值,并附加到颜色代码字符串值中。

public static String setColorAlpha(int percentage, String colorCode){
    double decValue = ((double)percentage / 100) * 255;
    String rawHexColor = colorCode.replace("#","");
    StringBuilder str = new StringBuilder(rawHexColor);

    if(Integer.toHexString((int)decValue).length() == 1)
        str.insert(0, "#0" + Integer.toHexString((int)decValue));
    else
        str.insert(0, "#" + Integer.toHexString((int)decValue));
    return str.toString();
}

因此, Utils.setColorAlpha(30, "#000000")将给您#4c000000