将 int 颜色转换为 argb

Posted

技术标签:

【中文标题】将 int 颜色转换为 argb【英文标题】:Convert int colours to argb 【发布时间】:2022-01-22 16:15:03 【问题描述】:
public static int getARGB(final int red, final int green, final int blue, final int alpha) 
        int argb = (alpha<<24)|(red<<16)|(green<<8)|blue;
        return argb;
    

所以我必须将不同的颜色整数转换为 argb 值。我的做法对吗?

【问题讨论】:

你忘了应用(0xFF000000 掩码可选到alpha 的移位结果:最左边的位将被丢弃,最右边的位将为零)0xFF0000red的移位结果,0xFF00到绿色的移位结果,0xFFblue的移位结果。如果我还记得位数学是如何工作的。 :D 您需要检查这些值是否在 [0, 255) 中。如果是,那么你的实现是正确的。 【参考方案1】:

您还应该为每个输入添加一个掩码,以确保它们不大于0xFF

int argb = (0xFF & alpha) << 24 | (0xFF & red) << 16 | (0xFF & green) << 8 | (0xFF & blue)

【讨论】:

我猜(0xFF &amp; alpha &lt;&lt; 24)可以简化为alpha &lt;&lt; 24 @fluffy &lt;&lt;在java中的优先级高于&amp;,所以我们需要加上括号(0xFF &amp; alpha) &lt;&lt; 24等等。由于&lt;&lt; 的优先级已经高于|,所以我们不需要括号;) 我的意思是另一个方面,而不是优先级:int 始终是 32 位,因此将其向左移动 24 位将丢弃最左边的位并填充最右边的 24零......好吧,它是有符号的,所以最右边的 24 位可以是 0 或 1,具体取决于符号,所以是的,它必须先被屏蔽然后移位。感谢您让我在这方面焕然一新! @fluffy 你是对的,第一部分((0xFF &amp; alpha) &lt;&lt; 24)不需要掩码,因为移位运算符无论如何都会转储最左边的 24 位。但是带有掩码的代码看起来更具可读性,所以我更喜欢它:) @user16320675 这取决于我要说的应用程序,抛出异常可能并不总是最好的解决方案,尤其是对于应用程序的部署版本。但是我们绝对可以添加一些代码来在超出范围时向控制台抛出警告,或者在我们处于调试模式时抛出异常

以上是关于将 int 颜色转换为 argb的主要内容,如果未能解决你的问题,请参考以下文章

使用 alpha 混合将 ARBG 转换为 RGB

rgb转换为cmyk颜色空间的举例

int argb 颜色输出奇怪的值

在运行时将android颜色字符串转换为int [重复]

c++,stl。将具有 rgb 颜色的字符串转换为 3 个 int 值?

c ++,stl。将带有rgb颜色的字符串转换为3个int值?