颜色的十六进制透明度

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

我想通过十六进制颜色设置透明度,所以假设我的十六进制颜色ID“#33b5e5”并且我希望它是50%透明。然后我将使用“#8033b5e5”,因为80是50%。

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

0% = #0010% = #1620% = #3230% = #4840% = #6450% = #8060% = #9670% = #11280% = #12890% = #144

现在,当我在十六进制中获得高于100时,问题开始出现。十六进制颜色代码只能是8个符号长,对吗?例如#11233b5e5(80%)崩溃。

我能做些什么来使我也能使用更高的数字?

1211639 次浏览

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

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

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

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

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

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

%十六进制
百分之百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

源问题

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

255 * .2 to hex

结果将生成0x33

但是,谷歌没有舍入值,因此您只能使用1位乘数。如果您想使用.85,您必须先获取255*.85的舍入值,然后在谷歌搜索中键入(rounded-value here) to hex

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

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

您可以在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在十六进制是2如果你把它四舍五入。

为2%

  • 2*255/100=5
  • 5在hexa中是5

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

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

  • 95%-F2//开始
  • 96%-F4//F2加2
  • 97%-F7//加3。或F2+5=F7
  • 98%-F9//增加2
  • 99%-FC//在六进制中添加3.9+3=12:C
  • 100%-FF//add 2

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

给一个人一条鱼,你可以喂他一天;教一个人钓鱼和钓鱼你喂他一辈子

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

使用SASS,您有一种非常优雅的方式将RGBA转换为十六进制ARGB:ie-hex-str

@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;}

我总是来这里检查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));elsestr.insert(0, "#" + Integer.toHexString((int)decValue));return str.toString();}

所以,Utils.setColorAlpha(30, "#000000")会给你#4c000000