如何使用Java中的整数值修改ARGB十六进制值的alpha

CHe*_*ess 1 java hex converter argb

我正在开发一个项目,允许用户使用自定义滑块调整颜色的alpha.滑块返回0-255之间的整数,该整数定义用户希望使用的新alpha值.

问题是颜色必须是十六进制,我不知道如何将0-255整数转换为可以修改原始ARGB十六进制的十六进制整数.我做了一些研究(比如" 如何更改预定义十六进制颜色的alpha? "),但我发现的任何内容都无法解决我的问题.我想过使用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);
Run Code Online (Sandbox Code Playgroud)

我需要的是changeAlpha方法,它修改颜色参数的alpha(这是一个十六进制整数),用户输入alpha(这是一个0-255的整数)

Ale*_* C. 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
}
Run Code Online (Sandbox Code Playgroud)

这可以很容易地减少到一个班轮:

return (origColor & 0x00ffffff) | (userInputedAlpha << 24);
Run Code Online (Sandbox Code Playgroud)

您似乎对这些值是否为十六进制这一事实感到不安.整数是整数,十六进制只是一种表示法.毕竟我们的电脑只有0和1.