Hex transparency in colors
我正在为我的应用程序小部件实现一个小部件透明选项,尽管我在获得正确的十六进制颜色值方面遇到了一些困难。作为一个全新的六角形颜色透明度,我搜索了一些,虽然我找不到一个具体的答案我的问题。
我想通过十六进制颜色设置透明度,所以假设我的十六进制颜色ID"33b5e5",我希望它是50%透明的。然后我用"8033B5E5",因为80是50%。
我在这里找到了一个有用的图表:http://www.dtp-aus.com/hexadeci.htm。有了这些数据,我想到了:
1 2 3 4 5 6 7 8 9 10 | 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% -氟
- 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
(源)
简短回答
您可以在https://play.golang.org/p/l1japyfzdki中看到十六进制值的完整百分比表,并在此游乐场中运行代码。
伪码的简短解释十六进制值百分比十六进制值到百分比
转换十进制的更多信息<=>十六进制
长答案:如何在头脑中计算这个问题一般可以用乘法来解决。
我们有一个百分比(从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是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英寸六角:C
- 100%—FF//加2
我宁愿教你如何找到解决办法,也不愿教你怎么摆弄桌子
Give a man a fish and you feed him for a day; teach a man to fish and
you feed him for a lifetime
颜色十六进制符号如下:
- 阿尔法:阿尔法
- 红色:红色
- 绿色:绿色
- B:蓝色
您应该首先看看十六进制是如何工作的。你最多可以写FF。
那张图表没有显示百分比。"#90"不是90%"。该图表显示十六进制到十进制的转换。十六进制数90(通常表示为0x90)相当于十进制数144。
十六进制数以16为基数,因此每个数字都是0到F之间的值。双字节十六进制值(例如颜色的透明度)的最大值是0xff,或以十进制表示的255。因此100%为0xff。
我为Android应用程序构建了这个小助手方法,可能会用到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /** * @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不舍入值,因此只能使用1位乘法器。如果你想使用say.85,你必须先得到255.85的四舍五入值,然后在谷歌搜索中键入
我意识到这是一个古老的问题,但我在做类似的事情时遇到了这个问题。
使用sass,您可以非常优雅地将rgba转换为hex argb:
1 2 3 4 5 6 7 8 9 10 11 12 13 | @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); } |
输出:
1 2 3 4 5 6 7 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%的透明度:
1 | hex(round(256*0.50)) |
:)
我总是来这里检查int/hex alpha值。最后,在我的Java UTLS类中创建一个简单的方法。此方法将百分比转换为十六进制值并附加到颜色代码字符串值。
1 2 3 4 5 6 7 8 9 10 11 | 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(); } |
所以,