1395

我正在为我的应用小部件实现小部件透明度选项,尽管我在正确获取十六进制颜色值时遇到了一些麻烦。作为十六进制颜色透明度的新手,我搜索了一下,虽然我找不到我的问题的具体答案。

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

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

4

10 回答 10

3975

这是不透明度的十六进制值的正确百分比表。例如,对于 50% 白色,您将使用 #80FFFFFF。要考虑透明度,请翻转百分比的顺序(更不透明 = 更不透明)。

% 十六进制
100% 法郎
95% F2
90% E6
85% D9
80% 抄送
75% 高炉
70% B3
65% A6
60% 99
55% 8C
50% 80
45% 73
40% 66
35% 59
30% 4D
25% 40
20% 33
15% 26
10% 1A
5% 0D
0% 00

来源问题

于 2013-06-21T16:15:35.430 回答
167

简短的回答

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

伪代码的简短解释

十六进制值的百分比

  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
  • 如果将其向下舍入,则2,5 in hexa 为2 。

2%

  • 2 * 255 / 100 = 5
  • 六进制中的 5 是5

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

如何计算你脑海中的数字?由于2.5的增量,第一个加2,下一个加3

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

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

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

于 2015-03-19T10:14:49.177 回答
48

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

  • 答:阿尔法
  • R:红色
  • G : 绿色
  • B:蓝色

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

于 2013-04-06T14:35:23.427 回答
25

该图表未显示百分比。“#90”不是“90%”。该图表显示了十六进制到十进制的转换。十六进制数 90(通常表示为 0x90)等价于十进制数 144。

十六进制数以 16 为基数,因此每个数字都是介于 0 和 F 之间的值。两个字节的十六进制值(例如颜色的透明度)的最大值是 0xFF,即十进制的 255。因此 100% 是 0xFF。

于 2013-04-06T14:39:48.463 回答
22

我为一个 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;
}
于 2014-06-24T11:03:58.267 回答
20

在此处输入图像描述

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

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

https://web.archive.org/web/20200812155307/http://online.sfsu.edu/chrism/hexval.html

于 2015-04-22T08:31:45.340 回答
8

在谷歌搜索上试试这个(或点击这里

255 * .2 to hex

它将因此产生0x33

但是,google 不会对值进行四舍五入,因此您只能使用 1 位乘数。如果你想使用 .85,你必须先得到 255 * .85 的四舍五入值,然后输入(rounded-value here) to hex谷歌搜索。

于 2014-06-11T06:09:28.130 回答
4

使用python来计算这个,例如(用python 3编写),50%的透明度:

hex(round(256*0.50))

:)

于 2014-12-12T02:16:15.600 回答
4

我意识到这是一个老问题,但我在做类似的事情时遇到了它。

使用 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;
}

于 2015-12-09T19:44:51.097 回答
-1

我总是来这里检查 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

于 2016-05-13T08:01:40.677 回答