ChatGPT解决这个技术问题 Extra ChatGPT

颜色的十六进制透明度[重复]

这个问题在这里已经有了答案:Understanding colours on Android (six characters) (10 answers) Closed 6 years ago。

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

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

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

Android Material Design:100%:FF、87%:DE、70%:B3、54%:8A、50%:80、38%:61、12%:{ 8}
8 个字符的颜色代码是十六进制的。 (它们并非特定于 Android。)您在其前面加上十进制数字。
这里还有 0-100 之间的百分比表:gist.github.com/lopspower/03fb1cc0ac9f32ef38f4

T
TylerH

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

% 十六进制 100% FF 95% F2 90% E6 85% D9 80% CC 75% BF 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

(source question)


我很欣赏 OP 有 android 标签,但是如果您使用扩展,这在 iOS 中也很有用。无论如何,评论的原因是,如果您在导航栏上使用半透明颜色,那么也使用 85% 来匹配 UIStatusbar 的颜色。 github.com/jwknz/UIColor-Hex-Swift
R
Raymond Chenon

简短的回答

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

伪代码的简短解释

十六进制值的百分比

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

十六进制值到百分比

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

More infos for the conversion decimal <=> hexadecimal

长答案:如何在你的脑海中计算

该问题通常可以通过 cross multiplication 解决。

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

100 <==> 255(十六进制的FF)

0 <==> 0(十六进制的 00)

1%

1 * 255 / 100 = 2,5

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

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

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


e
erkangur

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

答:阿尔法

R:红色

: 绿色

B:蓝色

您应该首先了解 hexadecimal 的工作原理。你最多可以写FF。


确保验证您的系统使用的是 ARGB 还是 RGBA(或其他)。可以防止你摸不着头脑,对一些相当简单且可能晦涩难懂的事情感到困惑。
B
Bryan Herbst

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

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


如果不是十六进制到十进制转换的问题,那么测量透明度的正确方法是什么? 0xFF 仍然多于两个数字。是否有某种我不知道的正确系统图表?
这是十六进制到十进制的问题。问题是您不能只取十进制数并将其称为百分比(例如,十进制的 50 不是百分比)。由于您可以用十六进制表示的最大十进制值为 255,因此 0x7F(十进制 127)的值约为 50%。十进制数 50 (0x32) 仅占 20% 左右。
至于 0xFF 超过 2 位数字 - “0x”只是一种符号方便,因此您不必在每次写出数字时都指定“十六进制数......”。在您的 XML 中,您仍然会忽略它。因此,根据上面提到的#AARRGGBB 方案@erkangur,50% 透明的黑色背景将作为“#7F000000”写入 color.xml 文件中。
d
dwbrito

我为一个 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;
}

a
amalBit

https://i.stack.imgur.com/zSbB6.png

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

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

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


过时的链接,它不会加载
@Haroon 感谢您指出这一点。现在更新了网址。
R
Rolf ツ

在谷歌搜索(或 click here)上试试这个

255 * .2 to hex

结果会生成 0x33

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


G
Geng Jiawen

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

hex(round(256*0.50))

:)


f
fontophilic

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

使用 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 { 背景颜色:rgba(88, 153, 131, 0.8); } .lt-ie9 .transparent { 背景色:透明;过滤器:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#CC589983', endColorstr='#CC589983');缩放:1; }


问题有 android 标签。
A
Amad Yus

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