尽管我在正确设置十六进制颜色值方面遇到一些麻烦,但我正在为我的应用程序小部件实现小部件透明度选项。完全不了解十六进制颜色透明度,尽管找不到具体问题的答案,但我进行了一些搜索。
我想通过十六进制颜色设置透明度,所以假设我的十六进制颜色 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。
( 来源 )
您可以在https://play.golang.org/p/l1JaPYFzDkI 中查看此十六进制值百分比的完整表并在此操场中运行代码。
这个问题一般可以通过交叉乘法来解决。
我们有一个百分比(范围从 0 到 100)和另一个数字(范围从 0 到 255),然后转换为十六进制。
对于 1%
对于 2%
最佳答案中的表格逐步给出了 5%的百分比。
如何计算脑海之间的数字?由于2.5 的增量,请在第一个添加 2,然后在下一个添加 3
我更喜欢教如何找到解决方案,而不是交给表格
给一个人一条鱼,你就喂他一天。教男人钓鱼,你一辈子喂他
该图表未显示百分比。 “#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;
}
在 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