我正在开发一个项目,允许用户使用自定义滑块调整颜色的alpha。滑块返回0-255之间的整数,该整数定义用户希望使用的新alpha值。
问题是颜色必须是十六进制,我不知道如何将0-255整数转换为可以修改原始ARGB十六进制的十六进制整数。我做了一些研究(比如“How would one change the alpha of a predefined hexadecimal color?”),但我找到的任何东西都无法解决我的问题。我想过使用java AWT中的Color类,但它没有getRGBA()方法。
/**
* Original ARGB hexadecimal
* Alpha: 255, Red: 238, Blue: 102, Green: 0
*/
int originalColor = 0xFFEE6600;
/**
* Creates a new hexadecimal ARGB color from origColor with its alpha
* replaced with the user's input (0-255)
* EX: If userInputedAlpha = 145 than the new color would be 0x91EE6600
*/
int newColor = changeAlpha(origColor, userInputedAlpha);
我需要的是changeAlpha方法,它修改颜色参数的alpha(十六进制整数),用户输入alpha(这是一个0-255的整数)
答案 0 :(得分:8)
你知道alpha值存储在24到31位中,所以你可以做的是首先应用一个遮罩来删除前一个alpha值,然后移动用户输入的值以将其应用于颜色。
int changeAlpha(int origColor, int userInputedAlpha) {
origColor = origColor & 0x00ffffff; //drop the previous alpha value
return (userInputedAlpha << 24) | origColor; //add the one the user inputted
}
可轻松将其简化为一个衬垫:
return (origColor & 0x00ffffff) | (userInputedAlpha << 24);
您似乎对这些值是十六进制的事实感到不安。整数是整数,十六进制只是一种表示法。毕竟我们的计算机只有0和1。