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

Posted

技术标签:

【中文标题】如何在 Java 中将 getRGB(x,y) 整数像素转换为 Color(r,g,b,a)?【英文标题】:How to convert getRGB(x,y) integer pixel to Color(r,g,b,a) in Java? 【发布时间】:2011-02-01 19:26:39 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

会提取颜色成分。但是,快速查看docs 说您可以这样做

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 除非你用 (0,200,0,255) 测试它! ;) 根据docs.oracle.com/javase/7/docs/api/java/awt/…:24-31 位为 alpha,16-23 位为红色,8-15 位为绿色,0-7 位为蓝色【参考方案2】:
    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

你是这个意思吗?

【讨论】:

以上是关于如何在 Java 中将 getRGB(x,y) 整数像素转换为 Color(r,g,b,a)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中将纬度和经度转换为 x,y?

如何在 Java 中将整数转换为浮点数?

Java - 从图像中获取像素数组

如何在 Android Java 中将 Color.RED 代码转换为颜色的整数值? [复制]

如何在Java或Groovy中将列表值动态更改为另一个列表

e671. 在缓冲图像中存取像素