假设我在android中将背景颜色设置为# AF 000000( AA RRGGBB)。 我想要十进制(0-255)的alpha通道( AA )的值,这将是175。
如何以编程方式完成该任务?
答案 0 :(得分:3)
这是一个纯Java解决方案,它不使用特定于Android的getAlpha()
方法。
您是否将此值存储在String
或int
中?如果您使用String
,请首先删除#
字符,然后将其转换为int
:
String hexString = "#05000000";
int color = Integer.parseInt(hexString.replaceAll("#", ""), 16);
然后我们需要进行一些操作。此十六进制颜色表示意味着(在ARGB模式下)您具有值#AARRGGBB。这是每个通道的2个字节,包括alpha通道。要获得alpha通道(十六进制值的AA
部分),我们需要“向右推6个字节”(Java是Big Endian languange)所以我们最终会得到像#000000AA
这样的东西。由于每个字节由8位组成,我们必须“推”将alpha值6 * 8 = 24
位“放到右边”:
int alpha = color >> 24;
此过程称为Bit Shifting。丢弃所有最右边的RGB值,然后我们将alpha值存储在int
中,小数值在0到255之间。
编辑:如果您已经拥有从getAlpha()返回的alpha值,则可以将其乘以255并将其置于最低位置:
int alpha = Math.floor(myView.getAlpha() * 255);
答案 1 :(得分:0)
您可以将HEX转换为十进制,只需使用,
int i= Integer.parseInt(HEX_STR,16);
或者如果你需要传递长十六进制值意味着使用like,
public static long hexToLong(String hex) {
return Long.parseLong(hex, 16);
}
答案 2 :(得分:0)
获取每个int值:
int argb = Color.parseColor("#00112233");
int alpha = 0xFF & (argb >> 24);
int red = 0xFF & (argb >> 16);
int green = 0xFF & (argb >> 8);
int blue = 0xFF & (argb >> 0);