2

我正在开发一个项目,该项目允许用户使用自定义滑块调整颜色的 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);

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

4

1 回答 1

9

您知道 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。

于 2014-04-26T22:14:45.697 回答