Java 将int颜色转换为int组件

Java 将int颜色转换为int组件,java,colors,Java,Colors,我获得像素的颜色 int color = image.getRGB(x,y); 然后我想分别获取红色、绿色和蓝色组件。怎么做?也许用点位掩码 int green = color&0x00ff00; 显然没用…:(您忘记将字节右移: int green = (color & 0x00ff00) >> 8; 您可以使用并传递给定的整数,并且hasalpha=true: Color color = new Color(image.getRGB(x,y), true);

我获得像素的颜色

int color = image.getRGB(x,y);
然后我想分别获取红色、绿色和蓝色组件。怎么做?也许用点位掩码

int green = color&0x00ff00;

显然没用…:(

您忘记将字节右移:

int green = (color & 0x00ff00) >> 8;
您可以使用并传递给定的整数,并且
hasalpha=true

Color color = new Color(image.getRGB(x,y), true);

返回类型的颜色,这意味着它有一个alpha通道。

要获取可以使用的颜色组件,请执行以下操作:

import android.graphics.Color;

        int r = Color.red(intColor);
        int g = Color.green(intColor);
        int b = Color.blue(intColor);
        int a = Color.alpha(intColor);

可能需要翻转R、A或B。

还有一件事。0x00ff等于0x00ff00吗?正如所说,
getRGB
返回rgba,而不是rgb…0x00ff是0xff,但0xff00不是,因为001与一(1)相同,但与100不同!所以我们不能忽略alpha吗?并进行逻辑and和shift吗?我想你可以。只要阅读javadocs,确保你知道rgb的正确字节顺序:(红、绿、蓝、alpha)或(alpha红、绿、蓝).然后按照codymanix的建议去做。不过,我不确定在这种情况下And/shift逻辑是否是跨架构的。
int value = image.getRGB(x,y);
R = (byte)(value & 0x000000FF);
G = (byte)((value & 0x0000FF00) >> 8);
B = (byte)((value & 0x00FF0000) >> 16);
A = (byte)((value & 0xFF000000) >> 24);