如何在Java中将getRGB(x,y)整数像素转换为Color(r,g,b,a)?

33

我从getRGB(x,y)得到了整数像素,但是我不知道如何将其转换为RGBA格式。例如,-16726016应该是Color(0,200,0,255)。有什么建议吗?

2个回答

51

如果我猜得没错,你得到的是一个形式为0xAARRGGBB的无符号整数,所以

int b = (argb)&0xFF;
int g = (argb>>8)&0xFF;
int r = (argb>>16)&0xFF;
int a = (argb>>24)&0xFF;

可以提取颜色组件。然而,快速查看文档表明您只需执行以下操作即可

Color c = new Color(argb);
或者
Color c = new Color(argb, true);

如果你也想要Color中的alpha分量。

更新:

原回答中红色和蓝色分量被颠倒,因此正确答案为:

int r = (argb>>16)&0xFF;
int g = (argb>>8)&0xFF;
int b = (argb>>0)&0xFF;

第一段代码也进行了更新


@Gevorg:可能是吧。但在测试代码时很容易注意到这一点。 :) - AKX
@AKX 除非你用(0,200,0,255)进行测试! ;) - Marsellus Wallace
3
根据http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#getRGB%28%29的说明:第24-31位是alpha通道,第16-23位是红色通道,第8-15位是绿色通道,第0-7位是蓝色通道。 - Jack

28
    Color c = new Color(-16726016, true);
    System.out.println(c.getRed());
    System.out.println(c.getGreen());
    System.out.println(c.getBlue());
    System.out.println(c.getAlpha());

输出:

0
200
0
255

你是指这个意思吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接